IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration Oracle Discussion :

Hint FIRST et union all


Sujet :

Administration Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 42
    Points : 21
    Points
    21
    Par défaut Hint FIRST et union all
    Bonjour,

    sur une base oracle oracle 12C en environnement Linux

    le métier a une requête dite de positionnement héritée d'un portage Iseries vers Unix pour laquelle le résultat du portage donne plusieurs sous requête "reliées" par un union all permettant de retourner l'ensemble des enregistrements d'une table à partir d'un enregistrement.

    La requête utilse un hint FIRST et INDEX_ASC pour forcer l'utilisation de l'index répondant aux critères métiers.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select /*+ FIRST_ROWS INDEX_ASC(table index) */ * from matable where a=:1, b=:2, c=:3, d >= :4 union all select *+ FIRST_ROWS INDEX_ASC(table index) */ * matable where a= :1, b= :2, c > :3 union all select *+ FIRST_ROWS INDEX_ASC(table index) */ * from matable where a = :1 and b > :2
    La requête permet de retourner l'ensemble des enregistrements à partir d'un enregistrement donnée jusqu'à la fin de la table. Par rapport au besoin métier, la requête retourne plus d'enregistrement que nécessaire; elle est gérée par un curseur qui effectue un next si l'enregistrement courant correspond au besoin métier et sort de la boucle si l'enregistrement courant est en dehors du besoin.

    Donc potentiellement, la requête initiale retourne plus d'enreg que nécessaire.

    La question que je me pose est sur l'utilisation du HINT FIRST et de l'échange entre le process client et le process server pour savoir si malgré tout le moteur oracle retourne l'ensemble des enregistrements dans la PGA du process serveur et que ensuite l'échange entre le process client et le process server s'effectue au rythme des next de mon programme métier ou bien est que l'ensemble des enregistrements répondant à ma requête sont transmis dans la mémoire du process client ?

    L'utilisation du hint FIRST permet-il ici de transmettre plus rapidement les données au process client dès qu'une des sous requêtes a été traitée par Oracle ?

    Merci par avance pour vos retour

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    L'indice FIRST ne m'évoque rien du tout et je ne le retrouve pas dans la documentation Oracle, il est traité comme un commentaire et n'a aucun impact sur les performances de la requête.
    J'imagine que le développeur voulait utiliser FIRST_ROWS.

    Je ne suis pas sûr aussi du résultat de cette requête sans aucun critère de tri, je suppose que le métier souhaite en premier les résultats du premier bloc, puis ceux du second et enfin ceux du dernier.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 42
    Points : 21
    Points
    21
    Par défaut
    Bonjour,

    oui il s'agit effectivement du FIRST_ROWS.

    Le besoin est effectivement que les résultats soient retournées triés dans l'ordre de l'index et dans l'ordre des sous requêtes.

    L'utilisation du UNION ALL garantie t'elle qu'Oracle retourne les enregistrements de la première sous-requête puis ensuite de la secondes .... ?


    A quel moment le FIRST_ROWS retourne le résultat de la requête au client ? Dès que la première sous requête est terminée ? dès que la première sous requête a ramené un certains nombre d'enregistrement ?

    Une fois que les premier enregistrement sont retournés, il attend que le client lui en demande de nouvelles ou bien il les envois quoi qu'il arrive sauf si le client a fermé le curseur ?

  4. #4
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    /* + n'est pas bon, il faut écrire /*+ pour que la suite soit considéré comme un hint; pas d'espace entre * et +
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 42
    Points : 21
    Points
    21
    Par défaut
    Oui merci, il s'agit d'un mauvais copié / collé.

    Mes interrogations concernent plus le comportement d'Oracle avec ce type de requête pour le hint /*+ FIRST_ROWS */ et les union all comme indiqué dans mon post précédent.

  6. #6
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Question complexe... je te propose de simplifier ta requête en éliminant les deux INDEX_ASC(table index) car, quand tu utilises FIRST_ROWS, l'optimiseur privilégie déjà les index.
    Autre point, laisse tomber le hint FIRST_ROWS, il est deprecated depuis Oracle 9i et remplacé par FIRST_ROWS_n avec FIRST_ROWS_1, FIRST_ROWS_10, FIRST_ROWS_100, FIRST_ROWS_1000.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 42
    Points : 21
    Points
    21
    Par défaut
    l'utilisation du hint index_asc permet d'éviter d'ajouter à la requête un order by pour éviter un surcoût lié au tri.

    L'index indiqué correspond à l'ordre attendu par le métier. Si je ne précise pas l'index souhaité, l'optimizer choisira peut-être un autre index et du coup je dois ajouter à cette requête un order by pour "assurer" le tri attendu et le order by à un coût.

    Tu dis que la question est complexe, je l'entends mais il est important que je comprenne le comportement du moteur concernant l'ordre dans lequel il retourne les données pour les sous-requêtes et à quel moment il les retourne

    L'utilisation du FIRST_ROWS_n n'est pas ce que je souhaite utilisé car potentiellement le traitement a besoin de traiter l'ensemble des données retournées par la requête. Cette requête est utilisée dans un traitement batch et traite séquentiellement les enregistrements retournés par cette requête en contrôlant à chaque boucle que l'enregistrement courant retourné correspond toujours au besoin métier.

    Cette requête permet de se positionner sur un enregistrement de la table et de retourner l'ensemble des enregistrements suivants. Je n'ai pas la possibilité à ce jour de revoir ce principe qui permet de reproduire l'existant du comportement sous Iseries.

  8. #8
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Je ne suis pas sur que l'utilisation du hint INDEX_ASC remplace le ORDER BY.
    Dans cette doc, on dit plutôt qu'il concerne les INDEX RANGE SCAN.
    https://docs.oracle.com/cd/E11882_01...htm#SQLRF50406
    The INDEX_ASC hint instructs the optimizer to use an index scan for the specified table. If the statement uses an index range scan, then Oracle Database scans the index entries in ascending order of their indexed values. Each parameter serves the same purpose as in "INDEX Hint".

    The default behavior for a range scan is to scan index entries in ascending order of their indexed values, or in descending order for a descending index. This hint does not change the default order of the index, and therefore does not specify anything more than the INDEX hint. However, you can use the INDEX_ASC hint to specify ascending range scans explicitly should the default behavior change.


    Petite précision : j'ai toujours lu sur Ask Tom que, si tu voulais des données triées, il fallait TOUJOURS utiliser un ORDER BY et qu'il n'y avait pas d'exception.
    De ce que je comprends, tu crois que en forçant l'utilisation d'un index, un SELECT va renvoyer les données triées? Je n'en suis pas sur à 100% sauf, je crois, quand on utilise un index couvrant mais là nous nous éloignons du sujet car tu fais un SELECT *.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 42
    Points : 21
    Points
    21
    Par défaut
    la lecture s'effectuant dans l'ordre de l'index, et l'index étant composé de l'ensemble des colonnes du tri attendu, l'ordre attendu est respecté (le paramètre caché "_optimizer_batch_table_access_by_rowid" ayant été désactivé)

    Le plan d'exécution utilise un index range scan , l'utilisation du hint INDEX_ASC permet selon moi d'assurer l'ordre de lecture souhaité (le tri souhaité correspond aux composantes de l'index qui est forcé).

    Nous souhaitons réactiver le paramètre "_optimizer_batch_table_access_by_rowid" et donc ajouter un order by pour garantir le même ordre qu'actuellement. Nous devons évaluer le surcoût que cela va entraîner.

    Concernant le fonctionnement du moteur sur l'ordre dans lequel sont retournés les enregistrements du UNION ALL, tu sais comment oralce fonctionne ? L'ordre de renvoi des données de chaque sous requête est-elle respectée ?

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Ikebukuro Voir le message
    ...j'ai toujours lu sur Ask Tom que, si tu voulais des données triées, il fallait TOUJOURS utiliser un ORDER BY et qu'il n'y avait pas d'exception.
    Et oui, et notamment si la requête est parallélisée !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  11. #11
    Membre actif

    Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2008
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Septembre 2008
    Messages : 167
    Points : 265
    Points
    265
    Par défaut
    Le "order by" est obligatoire pour assurer le bon ordre. Sinon Si une parties des données sont en mémoires ou table petites il y a risque que la requete ne passe pas par l'index mais prenne directement les valeurs en mémoire ou fassent un full scan qui est privilégié. Je pense que en entreprise édition les unions sont parallélisés ( pas en standart édition).
    il serai peu être possible d'ajouter les critères métiers dans la requête pour éviter le curseur. Il vaut en général mieux lancer trois requêtes pertinentes que passer par un curseur pour filtrer. l'optimiseur ce débrouille en général bien mieux.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 42
    Points : 21
    Points
    21
    Par défaut
    Nous sommes en Entreprise Edition et le plan d'exécution de semble pas montrer qu'une parallélisation est faite. La requête utilise actuellement un hint INDEX_ASC ce qui force l'optimizer à utiliser l'index correspondant à l'ordre des données souhaités.
    A ce jour pas d'utilisation de Order by et du coup il n'y a qu'un tri sur chaque sous requête mais comme il n'y a pas eu d'incident à ce jour (requêtes en place depuis plusieurs années) le résultat retourné doit également se faire dans l'ordre des sous-requêtes.

    Je prends note que pour garantir un tri il va falloir ajouter un tri global pour l'ensemble des union all en triant par exemple par un indice qui sera positionné sur chaque sous requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (select * from (select 1 as indice, ... union all select 2 ... union all select 3 ...) order by indice asc
    .

    S'agissant d'une requête de positionnemement qui retourne l'ensemble des données de la table à partir d'un enregistrement, le tri va avoir un coût non négligeable.

    Je vous mets la globalité de la requête actuelle et le plan d'exécution en pièce jointe.

    J'ai modifié la requête en ajoutant un tri à chaque sous requête et sous sql plus il utilise le même plan d'exécution que la requête sans tri alors que sous sql developer il utilise un plan d'exécution avec un sort order by. Il semblerait qu'un paramètre NLS soit responsable de ce comportement et cette différence de choix d'exécution.

    Lorsque le plan d'exécution utilise le SORT ORDER BY, j'ai un temps d'exécution multiplié par 10 (10 secondes vs 1s) car il n'y a pas suffisamment de place en mémoire PGA pour le tir et il y a plein d'opérations coûteuses de direct path write temp et direct path read temp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    call     count       cpu    elapsed       disk      query    current        rows
    ------- ------  -------- ---------- ---------- ---------- ----------  ----------
    Parse        1      0.02       0.02          0          0          0           0
    Execute      1      0.00       0.00          0          0          0           0
    Fetch      925      6.52       9.06      65913      52960          8       92492
    ------- ------  -------- ---------- ---------- ---------- ----------  ----------
    total      927      6.54       9.08      65913      52960          8       92492
     
    Misses in library cache during parse: 1
    Optimizer mode: FIRST_ROWS
    Parsing user id: 118     (recursive depth: 1)
    Number of plan statistics captured: 1
     
    Rows (1st) Rows (avg) Rows (max)  Row Source Operation
    ---------- ---------- ----------  ---------------------------------------------------
         92492      92492      92492  UNION-ALL  (cr=52960 pr=65913 pw=32518 time=366979 us starts=1)
             1          1          1   VIEW  (cr=5 pr=5 pw=0 time=191 us starts=1 cost=6 size=3942 card=1)
             1          1          1    SORT ORDER BY (cr=5 pr=5 pw=0 time=190 us starts=1 cost=6 size=1158 card=1)
             1          1          1     TABLE ACCESS BY INDEX ROWID ZEUPWXC0 (cr=5 pr=5 pw=0 time=136 us starts=1 cost=5 size=1158 card=1)
             1          1          1      INDEX RANGE SCAN IDX_ZEUPWXC0 (cr=4 pr=4 pw=0 time=115 us starts=1 cost=4 size=0 card=1)(object id 177314)
            29         29         29   VIEW  (cr=26 pr=23 pw=11 time=1941 us starts=1 cost=6 size=3942 card=1)
            29         29         29    SORT ORDER BY (cr=26 pr=23 pw=11 time=1940 us starts=1 cost=6 size=1158 card=1)
            29         29         29     TABLE ACCESS BY INDEX ROWID ZEUPWXC0 (cr=26 pr=12 pw=0 time=685 us starts=1 cost=5 size=1158 card=1)
            29         29         29      INDEX RANGE SCAN IDX_ZEUPWXC0 (cr=7 pr=3 pw=0 time=12 us starts=1 cost=4 size=0 card=1)(object id 177314)
            39         39         39   VIEW  (cr=35 pr=19 pw=14 time=2678 us starts=1 cost=6 size=3942 card=1)
            39         39         39    SORT ORDER BY (cr=35 pr=19 pw=14 time=2638 us starts=1 cost=6 size=1158 card=1)
            39         39         39     TABLE ACCESS BY INDEX ROWID ZEUPWXC0 (cr=35 pr=5 pw=0 time=262 us starts=1 cost=5 size=1158 card=1)
            39         39         39      INDEX RANGE SCAN IDX_ZEUPWXC0 (cr=9 pr=2 pw=0 time=104 us starts=1 cost=4 size=0 card=1)(object id 177314)
            42         42         42   VIEW  (cr=36 pr=16 pw=15 time=3765 us starts=1 cost=35 size=165564 card=42)
            42         42         42    SORT ORDER BY (cr=36 pr=16 pw=15 time=3763 us starts=1 cost=35 size=48636 card=42)
            42         42         42     TABLE ACCESS BY INDEX ROWID ZEUPWXC0 (cr=36 pr=1 pw=0 time=1943 us starts=1 cost=34 size=48636 card=42)
            42         42         42      INDEX RANGE SCAN IDX_ZEUPWXC0 (cr=9 pr=0 pw=0 time=68 us starts=1 cost=11 size=0 card=42)(object id 177314)
         92381      92381      92381   VIEW  (cr=52854 pr=65848 pw=32478 time=7930629 us starts=1 cost=87523 size=364098888 card=92364)
         92381      92381      92381    SORT ORDER BY (cr=52854 pr=65848 pw=32478 time=7911561 us starts=1 cost=87523 size=106957512 card=92364)
         92381      92381      92381     TABLE ACCESS BY INDEX ROWID ZEUPWXC0 (cr=52854 pr=33370 pw=0 time=1108850 us starts=1 cost=65125 size=106957512 card=92364)
         92381      92381      92381      INDEX RANGE SCAN IDX_ZEUPWXC0 (cr=16332 pr=16328 pw=0 time=425852 us starts=1 cost=16311 size=0 card=92364)(object id 177314)
             0          0          0   VIEW  (cr=4 pr=2 pw=0 time=176 us starts=1 cost=11 size=31536 card=8)
             0          0          0    SORT ORDER BY (cr=4 pr=2 pw=0 time=174 us starts=1 cost=11 size=9264 card=8)
             0          0          0     TABLE ACCESS BY INDEX ROWID ZEUPWXC0 (cr=4 pr=2 pw=0 time=150 us starts=1 cost=10 size=9264 card=8)
             0          0          0      INDEX RANGE SCAN IDX_ZEUPWXC0 (cr=4 pr=2 pw=0 time=124 us starts=1 cost=5 size=0 card=8)(object id 177314)
     
     
    Elapsed times include waiting on following events:
      Event waited on                             Times   Max. Wait  Total Waited
      ----------------------------------------   Waited  ----------  ------------
      PGA memory operation                         2776        0.00          0.02
      db file sequential read                     33395        0.00          0.18
      direct path write temp                       1255        0.00          0.30
      direct path read temp                        1272        0.00          0.04
      acknowledge over PGA limit                    231        0.01          2.40
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    SELECT /*+ FIRST_ROWS INDEX_ASC( ZEUPWXC0 IDX_ZEUPWXC0) */
           EUPWXCETB, EUPWXCPGF, EUPWXCLIG, EUPWXCELE, EUPWXCTAI,
           EUPWXCBA1, EUPWXCBA2, EUPWXCBA3, EUPWXCBA4, EUPWXCBA5,
           EUPWXCBA6, EUPWXCBA7, EUPWXCBA8, EUPWXCBA9, EUPWXCB10,
           EUPWXCB11, EUPWXCB12, EUPWXCB13, EUPWXCB14, EUPWXCB15,
           EUPWXCB16, EUPWXCB17, EUPWXCB18, EUPWXCB19, EUPWXCB20,
           EUPWXCDON,
           ID
      FROM SABSTD.ZEUPWXC0
     WHERE SAB_MBR = 'ZEUPWXC0' AND EUPWXCETB = 1 AND EUPWXCPGF = '000000000000012               ' AND EUPWXCBA1 = 'Document                      000000000' AND EUPWXCBA2 = 'FIToFICstmrCdtTrf             000000000' AND EUPWXCBA3 = 'CdtTrfTxInf                   000000000' AND EUPWXCBA4 = 'AccptncDtTm                   000000000' AND EUPWXCBA5 = '                              000000000' AND EUPWXCBA6 = '                              000000000' AND EUPWXCBA7 = '                              000000000' AND EUPWXCBA8 = '                              000000000' AND EUPWXCBA9 = '                              000000000' AND EUPWXCB10 = '                              000000000' AND EUPWXCB11 = '                              000000000' AND EUPWXCB12 = '                              000000000' AND EUPWXCB13 = '                              000000000' AND EUPWXCB14 = '                              000000000' AND EUPWXCB15 = '                              000000000' AND EUPWXCB16 = '                              000000000' AND EUPWXCB17 = '                              000000000' AND EUPWXCB18 = '                              000000000' AND EUPWXCB19 = '                              000000000' AND EUPWXCB20 >= '                              000000000' 
    UNION ALL
    SELECT /*+ FIRST_ROWS INDEX_ASC( ZEUPWXC0 IDX_ZEUPWXC0) */
           EUPWXCETB, EUPWXCPGF, EUPWXCLIG, EUPWXCELE, EUPWXCTAI,
           EUPWXCBA1, EUPWXCBA2, EUPWXCBA3, EUPWXCBA4, EUPWXCBA5,
           EUPWXCBA6, EUPWXCBA7, EUPWXCBA8, EUPWXCBA9, EUPWXCB10,
           EUPWXCB11, EUPWXCB12, EUPWXCB13, EUPWXCB14, EUPWXCB15,
           EUPWXCB16, EUPWXCB17, EUPWXCB18, EUPWXCB19, EUPWXCB20,
           EUPWXCDON,
           ID
      FROM SABSTD.ZEUPWXC0
     WHERE SAB_MBR = 'ZEUPWXC0' AND EUPWXCETB = 1 AND EUPWXCPGF = '000000000000012               ' AND EUPWXCBA1 = 'Document                      000000000' AND EUPWXCBA2 = 'FIToFICstmrCdtTrf             000000000' AND EUPWXCBA3 = 'CdtTrfTxInf                   000000000' AND EUPWXCBA4 > '                              000000000' 
    UNION ALL
    SELECT /*+ FIRST_ROWS INDEX_ASC( ZEUPWXC0 IDX_ZEUPWXC0) */
           EUPWXCETB, EUPWXCPGF, EUPWXCLIG, EUPWXCELE, EUPWXCTAI,
           EUPWXCBA1, EUPWXCBA2, EUPWXCBA3, EUPWXCBA4, EUPWXCBA5,
           EUPWXCBA6, EUPWXCBA7, EUPWXCBA8, EUPWXCBA9, EUPWXCB10,
           EUPWXCB11, EUPWXCB12, EUPWXCB13, EUPWXCB14, EUPWXCB15,
           EUPWXCB16, EUPWXCB17, EUPWXCB18, EUPWXCB19, EUPWXCB20,
           EUPWXCDON,
           ID
      FROM SABSTD.ZEUPWXC0
     WHERE SAB_MBR = 'ZEUPWXC0' AND EUPWXCETB = 1 AND EUPWXCPGF = '000000000000012               ' AND EUPWXCBA1 = 'Document                      000000000' AND EUPWXCBA2 = 'FIToFICstmrCdtTrf             000000000' AND EUPWXCBA3 > '                              000000000' 
    UNION ALL
    SELECT /*+ FIRST_ROWS INDEX_ASC( ZEUPWXC0 IDX_ZEUPWXC0) */
           EUPWXCETB, EUPWXCPGF, EUPWXCLIG, EUPWXCELE, EUPWXCTAI,
           EUPWXCBA1, EUPWXCBA2, EUPWXCBA3, EUPWXCBA4, EUPWXCBA5,
           EUPWXCBA6, EUPWXCBA7, EUPWXCBA8, EUPWXCBA9, EUPWXCB10,
           EUPWXCB11, EUPWXCB12, EUPWXCB13, EUPWXCB14, EUPWXCB15,
           EUPWXCB16, EUPWXCB17, EUPWXCB18, EUPWXCB19, EUPWXCB20,
           EUPWXCDON,
           ID
      FROM SABSTD.ZEUPWXC0
     WHERE SAB_MBR = 'ZEUPWXC0' AND EUPWXCETB = 1 AND EUPWXCPGF = '000000000000012               ' AND EUPWXCBA1 = 'Document                      000000000' AND EUPWXCBA2 > '                              000000000' 
    UNION ALL
    SELECT /*+ FIRST_ROWS INDEX_ASC( ZEUPWXC0 IDX_ZEUPWXC0) */
           EUPWXCETB, EUPWXCPGF, EUPWXCLIG, EUPWXCELE, EUPWXCTAI,
           EUPWXCBA1, EUPWXCBA2, EUPWXCBA3, EUPWXCBA4, EUPWXCBA5,
           EUPWXCBA6, EUPWXCBA7, EUPWXCBA8, EUPWXCBA9, EUPWXCB10,
           EUPWXCB11, EUPWXCB12, EUPWXCB13, EUPWXCB14, EUPWXCB15,
           EUPWXCB16, EUPWXCB17, EUPWXCB18, EUPWXCB19, EUPWXCB20,
           EUPWXCDON,
           ID
      FROM SABSTD.ZEUPWXC0
     WHERE SAB_MBR = 'ZEUPWXC0' AND EUPWXCETB = 1 AND EUPWXCPGF > '000000000000012               ' 
    UNION ALL
    SELECT /*+ FIRST_ROWS INDEX_ASC( ZEUPWXC0 IDX_ZEUPWXC0) */
           EUPWXCETB, EUPWXCPGF, EUPWXCLIG, EUPWXCELE, EUPWXCTAI,
           EUPWXCBA1, EUPWXCBA2, EUPWXCBA3, EUPWXCBA4, EUPWXCBA5,
           EUPWXCBA6, EUPWXCBA7, EUPWXCBA8, EUPWXCBA9, EUPWXCB10,
           EUPWXCB11, EUPWXCB12, EUPWXCB13, EUPWXCB14, EUPWXCB15,
           EUPWXCB16, EUPWXCB17, EUPWXCB18, EUPWXCB19, EUPWXCB20,
           EUPWXCDON,
           ID
      FROM SABSTD.ZEUPWXC0
     WHERE SAB_MBR = 'ZEUPWXC0' AND EUPWXCETB > 1 ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    SQL_ID  aajts8rfch5tw, child number 0
    -------------------------------------
    SELECT /*+ FIRST_ROWS INDEX_ASC( ZEUPWXC0 IDX_ZEUPWXC0) withoutorder */ 
    EUPWXCETB, EUPWXCPGF, EUPWXCLIG, EUPWXCELE, EUPWXCTAI, EUPWXCBA1, 
    EUPWXCBA2, EUPWXCBA3, EUPWXCBA4, EUPWXCBA5, EUPWXCBA6, EUPWXCBA7, 
    EUPWXCBA8, EUPWXCBA9, EUPWXCB10, EUPWXCB11, EUPWXCB12, EUPWXCB13, 
    EUPWXCB14, EUPWXCB15, EUPWXCB16, EUPWXCB17, EUPWXCB18, EUPWXCB19, 
    EUPWXCB20, EUPWXCDON, ID FROM SABSTD.ZEUPWXC0 WHERE SAB_MBR = 
    'ZEUPWXC0' AND EUPWXCETB = 1 AND EUPWXCPGF = '000000000000012           
        ' AND EUPWXCBA1 = 'Document                      000000000' AND 
    EUPWXCBA2 = 'FIToFICstmrCdtTrf             000000000' AND EUPWXCBA3 = 
    'CdtTrfTxInf                   000000000' AND EUPWXCBA4 = 'AccptncDtTm  
                     000000000' AND EUPWXCBA5 = '                           
       000000000' AND EUPWXCBA6 = '                              000000000' 
    AND EUPWXCBA7 = '                              000000000' AND EUPWXCBA8 
    = '                              000000000' AND EUPWXCBA9 = '           
                       000000000' AN
     
    Plan hash value: 1567302435
     
    ---------------------------------------------------------------------------------------------
    | Id  | Operation                    | Name         | Rows  | Bytes | Cost (%CPU)| Time     |
    ---------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT             |              |       |       | 65184 (100)|          |
    |   1 |  UNION-ALL                   |              |       |       |            |          |
    |   2 |   TABLE ACCESS BY INDEX ROWID| ZEUPWXC0     |     1 |  1158 |     5   (0)| 00:00:01 |
    |*  3 |    INDEX RANGE SCAN          | IDX_ZEUPWXC0 |     1 |       |     4   (0)| 00:00:01 |
    |   4 |   TABLE ACCESS BY INDEX ROWID| ZEUPWXC0     |     1 |  1158 |     5   (0)| 00:00:01 |
    |*  5 |    INDEX RANGE SCAN          | IDX_ZEUPWXC0 |     1 |       |     4   (0)| 00:00:01 |
    |   6 |   TABLE ACCESS BY INDEX ROWID| ZEUPWXC0     |     1 |  1158 |     5   (0)| 00:00:01 |
    |*  7 |    INDEX RANGE SCAN          | IDX_ZEUPWXC0 |     1 |       |     4   (0)| 00:00:01 |
    |   8 |   TABLE ACCESS BY INDEX ROWID| ZEUPWXC0     |    42 | 48636 |    34   (0)| 00:00:01 |
    |*  9 |    INDEX RANGE SCAN          | IDX_ZEUPWXC0 |    42 |       |    11   (0)| 00:00:01 |
    |  10 |   TABLE ACCESS BY INDEX ROWID| ZEUPWXC0     | 92364 |   102M| 65125   (1)| 00:00:03 |
    |* 11 |    INDEX RANGE SCAN          | IDX_ZEUPWXC0 | 92364 |       | 16311   (1)| 00:00:01 |
    |  12 |   TABLE ACCESS BY INDEX ROWID| ZEUPWXC0     |     8 |  9264 |    10   (0)| 00:00:01 |
    |* 13 |    INDEX RANGE SCAN          | IDX_ZEUPWXC0 |     8 |       |     5   (0)| 00:00:01 |
    ---------------------------------------------------------------------------------------------
     
    Query Block Name / Object Alias (identified by operation id):
    -------------------------------------------------------------
     
       1 - SET$1
       2 - SEL$1 / ZEUPWXC0@SEL$1
       3 - SEL$1 / ZEUPWXC0@SEL$1
       4 - SEL$2 / ZEUPWXC0@SEL$2
       5 - SEL$2 / ZEUPWXC0@SEL$2
       6 - SEL$3 / ZEUPWXC0@SEL$3
       7 - SEL$3 / ZEUPWXC0@SEL$3
       8 - SEL$4 / ZEUPWXC0@SEL$4
       9 - SEL$4 / ZEUPWXC0@SEL$4
      10 - SEL$5 / ZEUPWXC0@SEL$5
      11 - SEL$5 / ZEUPWXC0@SEL$5
      12 - SEL$6 / ZEUPWXC0@SEL$6
      13 - SEL$6 / ZEUPWXC0@SEL$6
     
    Outline Data
    -------------
     
      /*+
          BEGIN_OUTLINE_DATA
          IGNORE_OPTIM_EMBEDDED_HINTS
          OPTIMIZER_FEATURES_ENABLE('12.2.0.1')
          DB_VERSION('12.2.0.1')
          OPT_PARAM('_optimizer_batch_table_access_by_rowid' 'false')
          OPT_PARAM('star_transformation_enabled' 'true')
          FIRST_ROWS
          OUTLINE_LEAF(@"SEL$1")
          OUTLINE_LEAF(@"SEL$2")
          OUTLINE_LEAF(@"SEL$3")
          OUTLINE_LEAF(@"SEL$4")
          OUTLINE_LEAF(@"SEL$5")
          OUTLINE_LEAF(@"SEL$6")
          OUTLINE_LEAF(@"SET$1")
          INDEX_RS_ASC(@"SEL$6" "ZEUPWXC0"@"SEL$6" ("ZEUPWXC0"."SAB_MBR" 
                  "ZEUPWXC0"."EUPWXCETB" "ZEUPWXC0"."EUPWXCPGF" "ZEUPWXC0"."EUPWXCBA1" 
                  "ZEUPWXC0"."EUPWXCBA2" "ZEUPWXC0"."EUPWXCBA3" "ZEUPWXC0"."EUPWXCBA4" 
                  "ZEUPWXC0"."EUPWXCBA5" "ZEUPWXC0"."EUPWXCBA6" "ZEUPWXC0"."EUPWXCBA7" 
                  "ZEUPWXC0"."EUPWXCBA8" "ZEUPWXC0"."EUPWXCBA9" "ZEUPWXC0"."EUPWXCB10" 
                  "ZEUPWXC0"."EUPWXCB11" "ZEUPWXC0"."EUPWXCB12" "ZEUPWXC0"."EUPWXCB13" 
                  "ZEUPWXC0"."EUPWXCB14" "ZEUPWXC0"."EUPWXCB15" "ZEUPWXC0"."EUPWXCB16" 
                  "ZEUPWXC0"."EUPWXCB17" "ZEUPWXC0"."EUPWXCB18" "ZEUPWXC0"."EUPWXCB19" 
                  "ZEUPWXC0"."EUPWXCB20"))
          INDEX_RS_ASC(@"SEL$5" "ZEUPWXC0"@"SEL$5" ("ZEUPWXC0"."SAB_MBR" 
                  "ZEUPWXC0"."EUPWXCETB" "ZEUPWXC0"."EUPWXCPGF" "ZEUPWXC0"."EUPWXCBA1" 
                  "ZEUPWXC0"."EUPWXCBA2" "ZEUPWXC0"."EUPWXCBA3" "ZEUPWXC0"."EUPWXCBA4" 
                  "ZEUPWXC0"."EUPWXCBA5" "ZEUPWXC0"."EUPWXCBA6" "ZEUPWXC0"."EUPWXCBA7" 
                  "ZEUPWXC0"."EUPWXCBA8" "ZEUPWXC0"."EUPWXCBA9" "ZEUPWXC0"."EUPWXCB10" 
                  "ZEUPWXC0"."EUPWXCB11" "ZEUPWXC0"."EUPWXCB12" "ZEUPWXC0"."EUPWXCB13" 
                  "ZEUPWXC0"."EUPWXCB14" "ZEUPWXC0"."EUPWXCB15" "ZEUPWXC0"."EUPWXCB16" 
                  "ZEUPWXC0"."EUPWXCB17" "ZEUPWXC0"."EUPWXCB18" "ZEUPWXC0"."EUPWXCB19" 
                  "ZEUPWXC0"."EUPWXCB20"))
          INDEX_RS_ASC(@"SEL$4" "ZEUPWXC0"@"SEL$4" ("ZEUPWXC0"."SAB_MBR" 
                  "ZEUPWXC0"."EUPWXCETB" "ZEUPWXC0"."EUPWXCPGF" "ZEUPWXC0"."EUPWXCBA1" 
                  "ZEUPWXC0"."EUPWXCBA2" "ZEUPWXC0"."EUPWXCBA3" "ZEUPWXC0"."EUPWXCBA4" 
                  "ZEUPWXC0"."EUPWXCBA5" "ZEUPWXC0"."EUPWXCBA6" "ZEUPWXC0"."EUPWXCBA7" 
                  "ZEUPWXC0"."EUPWXCBA8" "ZEUPWXC0"."EUPWXCBA9" "ZEUPWXC0"."EUPWXCB10" 
                  "ZEUPWXC0"."EUPWXCB11" "ZEUPWXC0"."EUPWXCB12" "ZEUPWXC0"."EUPWXCB13" 
                  "ZEUPWXC0"."EUPWXCB14" "ZEUPWXC0"."EUPWXCB15" "ZEUPWXC0"."EUPWXCB16" 
                  "ZEUPWXC0"."EUPWXCB17" "ZEUPWXC0"."EUPWXCB18" "ZEUPWXC0"."EUPWXCB19" 
                  "ZEUPWXC0"."EUPWXCB20"))
          INDEX_RS_ASC(@"SEL$3" "ZEUPWXC0"@"SEL$3" ("ZEUPWXC0"."SAB_MBR" 
                  "ZEUPWXC0"."EUPWXCETB" "ZEUPWXC0"."EUPWXCPGF" "ZEUPWXC0"."EUPWXCBA1" 
                  "ZEUPWXC0"."EUPWXCBA2" "ZEUPWXC0"."EUPWXCBA3" "ZEUPWXC0"."EUPWXCBA4" 
                  "ZEUPWXC0"."EUPWXCBA5" "ZEUPWXC0"."EUPWXCBA6" "ZEUPWXC0"."EUPWXCBA7" 
                  "ZEUPWXC0"."EUPWXCBA8" "ZEUPWXC0"."EUPWXCBA9" "ZEUPWXC0"."EUPWXCB10" 
                  "ZEUPWXC0"."EUPWXCB11" "ZEUPWXC0"."EUPWXCB12" "ZEUPWXC0"."EUPWXCB13" 
                  "ZEUPWXC0"."EUPWXCB14" "ZEUPWXC0"."EUPWXCB15" "ZEUPWXC0"."EUPWXCB16" 
                  "ZEUPWXC0"."EUPWXCB17" "ZEUPWXC0"."EUPWXCB18" "ZEUPWXC0"."EUPWXCB19" 
                  "ZEUPWXC0"."EUPWXCB20"))
          INDEX_RS_ASC(@"SEL$2" "ZEUPWXC0"@"SEL$2" ("ZEUPWXC0"."SAB_MBR" 
                  "ZEUPWXC0"."EUPWXCETB" "ZEUPWXC0"."EUPWXCPGF" "ZEUPWXC0"."EUPWXCBA1" 
                  "ZEUPWXC0"."EUPWXCBA2" "ZEUPWXC0"."EUPWXCBA3" "ZEUPWXC0"."EUPWXCBA4" 
                  "ZEUPWXC0"."EUPWXCBA5" "ZEUPWXC0"."EUPWXCBA6" "ZEUPWXC0"."EUPWXCBA7" 
                  "ZEUPWXC0"."EUPWXCBA8" "ZEUPWXC0"."EUPWXCBA9" "ZEUPWXC0"."EUPWXCB10" 
                  "ZEUPWXC0"."EUPWXCB11" "ZEUPWXC0"."EUPWXCB12" "ZEUPWXC0"."EUPWXCB13" 
                  "ZEUPWXC0"."EUPWXCB14" "ZEUPWXC0"."EUPWXCB15" "ZEUPWXC0"."EUPWXCB16" 
                  "ZEUPWXC0"."EUPWXCB17" "ZEUPWXC0"."EUPWXCB18" "ZEUPWXC0"."EUPWXCB19" 
                  "ZEUPWXC0"."EUPWXCB20"))
          INDEX_RS_ASC(@"SEL$1" "ZEUPWXC0"@"SEL$1" ("ZEUPWXC0"."SAB_MBR" 
                  "ZEUPWXC0"."EUPWXCETB" "ZEUPWXC0"."EUPWXCPGF" "ZEUPWXC0"."EUPWXCBA1" 
                  "ZEUPWXC0"."EUPWXCBA2" "ZEUPWXC0"."EUPWXCBA3" "ZEUPWXC0"."EUPWXCBA4" 
                  "ZEUPWXC0"."EUPWXCBA5" "ZEUPWXC0"."EUPWXCBA6" "ZEUPWXC0"."EUPWXCBA7" 
                  "ZEUPWXC0"."EUPWXCBA8" "ZEUPWXC0"."EUPWXCBA9" "ZEUPWXC0"."EUPWXCB10" 
                  "ZEUPWXC0"."EUPWXCB11" "ZEUPWXC0"."EUPWXCB12" "ZEUPWXC0"."EUPWXCB13" 
                  "ZEUPWXC0"."EUPWXCB14" "ZEUPWXC0"."EUPWXCB15" "ZEUPWXC0"."EUPWXCB16" 
                  "ZEUPWXC0"."EUPWXCB17" "ZEUPWXC0"."EUPWXCB18" "ZEUPWXC0"."EUPWXCB19" 
                  "ZEUPWXC0"."EUPWXCB20"))
          END_OUTLINE_DATA
      */
     
    Predicate Information (identified by operation id):
    ---------------------------------------------------
     
       3 - access("SAB_MBR"='ZEUPWXC0' AND "EUPWXCETB"=1 AND 
                  "EUPWXCPGF"='000000000000012               ' AND "EUPWXCBA1"='Document               
                         000000000' AND "EUPWXCBA2"='FIToFICstmrCdtTrf             000000000' AND 
                  "EUPWXCBA3"='CdtTrfTxInf                   000000000' AND "EUPWXCBA4"='AccptncDtTm   
                                  000000000' AND "EUPWXCBA5"='                              000000000' 
                  AND "EUPWXCBA6"='                              000000000' AND "EUPWXCBA7"='          
                                      000000000' AND "EUPWXCBA8"='                              
                  000000000' AND "EUPWXCBA9"='                              000000000' AND 
                  "EUPWXCB10"='                              000000000' AND "EUPWXCB11"='              
                                  000000000' AND "EUPWXCB12"='                              000000000' 
                  AND "EUPWXCB13"='                              000000000' AND "EUPWXCB14"='          
                                      000000000' AND "EUPWXCB15"='                              
                  000000000' AND "EUPWXCB16"='                              000000000' AND 
                  "EUPWXCB17"='                              000000000' AND "EUPWXCB18"='              
                                  000000000' AND "EUPWXCB19"='                              000000000' 
                  AND "EUPWXCB20">='                              000000000')
       5 - access("SAB_MBR"='ZEUPWXC0' AND "EUPWXCETB"=1 AND 
                  "EUPWXCPGF"='000000000000012               ' AND "EUPWXCBA1"='Document               
                         000000000' AND "EUPWXCBA2"='FIToFICstmrCdtTrf             000000000' AND 
                  "EUPWXCBA3"='CdtTrfTxInf                   000000000' AND "EUPWXCBA4">'              
                                  000000000')
       7 - access("SAB_MBR"='ZEUPWXC0' AND "EUPWXCETB"=1 AND 
                  "EUPWXCPGF"='000000000000012               ' AND "EUPWXCBA1"='Document               
                         000000000' AND "EUPWXCBA2"='FIToFICstmrCdtTrf             000000000' AND 
                  "EUPWXCBA3">'                              000000000')
       9 - access("SAB_MBR"='ZEUPWXC0' AND "EUPWXCETB"=1 AND 
                  "EUPWXCPGF"='000000000000012               ' AND "EUPWXCBA1"='Document               
                         000000000' AND "EUPWXCBA2">'                              000000000')
      11 - access("SAB_MBR"='ZEUPWXC0' AND "EUPWXCETB"=1 AND 
                  "EUPWXCPGF">'000000000000012               ')
      13 - access("SAB_MBR"='ZEUPWXC0' AND "EUPWXCETB">1)
     
    Column Projection Information (identified by operation id):
    -----------------------------------------------------------
     
       1 - STRDEF[22], STRDEF[120], STRDEF[22], STRDEF[4], STRDEF[22], STRDEF[156], 
           STRDEF[156], STRDEF[156], STRDEF[156], STRDEF[156], STRDEF[156], STRDEF[156], 
           STRDEF[156], STRDEF[156], STRDEF[156], STRDEF[156], STRDEF[156], STRDEF[156], 
           STRDEF[156], STRDEF[156], STRDEF[156], STRDEF[156], STRDEF[156], STRDEF[156], 
           STRDEF[156], STRDEF[1200], STRDEF[22]
       2 - "ID"[NUMBER,22], "EUPWXCETB"[NUMBER,22], "EUPWXCPGF"[CHARACTER,120], 
           "EUPWXCLIG"[NUMBER,22], "EUPWXCELE"[CHARACTER,4], "EUPWXCTAI"[NUMBER,22], 
           "EUPWXCBA1"[CHARACTER,156], "EUPWXCBA2"[CHARACTER,156], "EUPWXCBA3"[CHARACTER,156], 
           "EUPWXCBA4"[CHARACTER,156], "EUPWXCBA5"[CHARACTER,156], "EUPWXCBA6"[CHARACTER,156], 
           "EUPWXCBA7"[CHARACTER,156], "EUPWXCBA8"[CHARACTER,156], "EUPWXCBA9"[CHARACTER,156], 
           "EUPWXCB10"[CHARACTER,156], "EUPWXCB11"[CHARACTER,156], "EUPWXCB12"[CHARACTER,156], 
           "EUPWXCB13"[CHARACTER,156], "EUPWXCB14"[CHARACTER,156], "EUPWXCB15"[CHARACTER,156], 
           "EUPWXCB16"[CHARACTER,156], "EUPWXCB17"[CHARACTER,156], "EUPWXCB18"[CHARACTER,156], 
           "EUPWXCB19"[CHARACTER,156], "EUPWXCB20"[CHARACTER,156], "EUPWXCDON"[VARCHAR2,1200]
       3 - "ZEUPWXC0".ROWID[ROWID,10], "EUPWXCETB"[NUMBER,22], 
           "EUPWXCPGF"[CHARACTER,120], "EUPWXCBA1"[CHARACTER,156], "EUPWXCBA2"[CHARACTER,156], 
           "EUPWXCBA3"[CHARACTER,156], "EUPWXCBA4"[CHARACTER,156], "EUPWXCBA5"[CHARACTER,156], 
           "EUPWXCBA6"[CHARACTER,156], "EUPWXCBA7"[CHARACTER,156], "EUPWXCBA8"[CHARACTER,156], 
           "EUPWXCBA9"[CHARACTER,156], "EUPWXCB10"[CHARACTER,156], "EUPWXCB11"[CHARACTER,156], 
           "EUPWXCB12"[CHARACTER,156], "EUPWXCB13"[CHARACTER,156], "EUPWXCB14"[CHARACTER,156], 
           "EUPWXCB15"[CHARACTER,156], "EUPWXCB16"[CHARACTER,156], "EUPWXCB17"[CHARACTER,156], 
           "EUPWXCB18"[CHARACTER,156], "EUPWXCB19"[CHARACTER,156], "EUPWXCB20"[CHARACTER,156]
       4 - "ID"[NUMBER,22], "EUPWXCETB"[NUMBER,22], "EUPWXCPGF"[CHARACTER,120], 
           "EUPWXCLIG"[NUMBER,22], "EUPWXCELE"[CHARACTER,4], "EUPWXCTAI"[NUMBER,22], 
           "EUPWXCBA1"[CHARACTER,156], "EUPWXCBA2"[CHARACTER,156], "EUPWXCBA3"[CHARACTER,156], 
           "EUPWXCBA4"[CHARACTER,156], "EUPWXCBA5"[CHARACTER,156], "EUPWXCBA6"[CHARACTER,156], 
           "EUPWXCBA7"[CHARACTER,156], "EUPWXCBA8"[CHARACTER,156], "EUPWXCBA9"[CHARACTER,156], 
           "EUPWXCB10"[CHARACTER,156], "EUPWXCB11"[CHARACTER,156], "EUPWXCB12"[CHARACTER,156], 
           "EUPWXCB13"[CHARACTER,156], "EUPWXCB14"[CHARACTER,156], "EUPWXCB15"[CHARACTER,156], 
           "EUPWXCB16"[CHARACTER,156], "EUPWXCB17"[CHARACTER,156], "EUPWXCB18"[CHARACTER,156], 
           "EUPWXCB19"[CHARACTER,156], "EUPWXCB20"[CHARACTER,156], "EUPWXCDON"[VARCHAR2,1200]
       5 - "ZEUPWXC0".ROWID[ROWID,10], "EUPWXCETB"[NUMBER,22], 
           "EUPWXCPGF"[CHARACTER,120], "EUPWXCBA1"[CHARACTER,156], "EUPWXCBA2"[CHARACTER,156], 
           "EUPWXCBA3"[CHARACTER,156], "EUPWXCBA4"[CHARACTER,156], "EUPWXCBA5"[CHARACTER,156], 
           "EUPWXCBA6"[CHARACTER,156], "EUPWXCBA7"[CHARACTER,156], "EUPWXCBA8"[CHARACTER,156], 
           "EUPWXCBA9"[CHARACTER,156], "EUPWXCB10"[CHARACTER,156], "EUPWXCB11"[CHARACTER,156], 
           "EUPWXCB12"[CHARACTER,156], "EUPWXCB13"[CHARACTER,156], "EUPWXCB14"[CHARACTER,156], 
           "EUPWXCB15"[CHARACTER,156], "EUPWXCB16"[CHARACTER,156], "EUPWXCB17"[CHARACTER,156], 
           "EUPWXCB18"[CHARACTER,156], "EUPWXCB19"[CHARACTER,156], "EUPWXCB20"[CHARACTER,156]
       6 - "ID"[NUMBER,22], "EUPWXCETB"[NUMBER,22], "EUPWXCPGF"[CHARACTER,120], 
           "EUPWXCLIG"[NUMBER,22], "EUPWXCELE"[CHARACTER,4], "EUPWXCTAI"[NUMBER,22], 
           "EUPWXCBA1"[CHARACTER,156], "EUPWXCBA2"[CHARACTER,156], "EUPWXCBA3"[CHARACTER,156], 
           "EUPWXCBA4"[CHARACTER,156], "EUPWXCBA5"[CHARACTER,156], "EUPWXCBA6"[CHARACTER,156], 
           "EUPWXCBA7"[CHARACTER,156], "EUPWXCBA8"[CHARACTER,156], "EUPWXCBA9"[CHARACTER,156], 
           "EUPWXCB10"[CHARACTER,156], "EUPWXCB11"[CHARACTER,156], "EUPWXCB12"[CHARACTER,156], 
           "EUPWXCB13"[CHARACTER,156], "EUPWXCB14"[CHARACTER,156], "EUPWXCB15"[CHARACTER,156], 
           "EUPWXCB16"[CHARACTER,156], "EUPWXCB17"[CHARACTER,156], "EUPWXCB18"[CHARACTER,156], 
           "EUPWXCB19"[CHARACTER,156], "EUPWXCB20"[CHARACTER,156], "EUPWXCDON"[VARCHAR2,1200]
       7 - "ZEUPWXC0".ROWID[ROWID,10], "EUPWXCETB"[NUMBER,22], 
           "EUPWXCPGF"[CHARACTER,120], "EUPWXCBA1"[CHARACTER,156], "EUPWXCBA2"[CHARACTER,156], 
           "EUPWXCBA3"[CHARACTER,156], "EUPWXCBA4"[CHARACTER,156], "EUPWXCBA5"[CHARACTER,156], 
           "EUPWXCBA6"[CHARACTER,156], "EUPWXCBA7"[CHARACTER,156], "EUPWXCBA8"[CHARACTER,156], 
           "EUPWXCBA9"[CHARACTER,156], "EUPWXCB10"[CHARACTER,156], "EUPWXCB11"[CHARACTER,156], 
           "EUPWXCB12"[CHARACTER,156], "EUPWXCB13"[CHARACTER,156], "EUPWXCB14"[CHARACTER,156], 
           "EUPWXCB15"[CHARACTER,156], "EUPWXCB16"[CHARACTER,156], "EUPWXCB17"[CHARACTER,156], 
           "EUPWXCB18"[CHARACTER,156], "EUPWXCB19"[CHARACTER,156], "EUPWXCB20"[CHARACTER,156]
       8 - "ID"[NUMBER,22], "EUPWXCETB"[NUMBER,22], "EUPWXCPGF"[CHARACTER,120], 
           "EUPWXCLIG"[NUMBER,22], "EUPWXCELE"[CHARACTER,4], "EUPWXCTAI"[NUMBER,22], 
           "EUPWXCBA1"[CHARACTER,156], "EUPWXCBA2"[CHARACTER,156], "EUPWXCBA3"[CHARACTER,156], 
           "EUPWXCBA4"[CHARACTER,156], "EUPWXCBA5"[CHARACTER,156], "EUPWXCBA6"[CHARACTER,156], 
           "EUPWXCBA7"[CHARACTER,156], "EUPWXCBA8"[CHARACTER,156], "EUPWXCBA9"[CHARACTER,156], 
           "EUPWXCB10"[CHARACTER,156], "EUPWXCB11"[CHARACTER,156], "EUPWXCB12"[CHARACTER,156], 
           "EUPWXCB13"[CHARACTER,156], "EUPWXCB14"[CHARACTER,156], "EUPWXCB15"[CHARACTER,156], 
           "EUPWXCB16"[CHARACTER,156], "EUPWXCB17"[CHARACTER,156], "EUPWXCB18"[CHARACTER,156], 
           "EUPWXCB19"[CHARACTER,156], "EUPWXCB20"[CHARACTER,156], "EUPWXCDON"[VARCHAR2,1200]
       9 - "ZEUPWXC0".ROWID[ROWID,10], "EUPWXCETB"[NUMBER,22], 
           "EUPWXCPGF"[CHARACTER,120], "EUPWXCBA1"[CHARACTER,156], "EUPWXCBA2"[CHARACTER,156], 
           "EUPWXCBA3"[CHARACTER,156], "EUPWXCBA4"[CHARACTER,156], "EUPWXCBA5"[CHARACTER,156], 
           "EUPWXCBA6"[CHARACTER,156], "EUPWXCBA7"[CHARACTER,156], "EUPWXCBA8"[CHARACTER,156], 
           "EUPWXCBA9"[CHARACTER,156], "EUPWXCB10"[CHARACTER,156], "EUPWXCB11"[CHARACTER,156], 
           "EUPWXCB12"[CHARACTER,156], "EUPWXCB13"[CHARACTER,156], "EUPWXCB14"[CHARACTER,156], 
           "EUPWXCB15"[CHARACTER,156], "EUPWXCB16"[CHARACTER,156], "EUPWXCB17"[CHARACTER,156], 
           "EUPWXCB18"[CHARACTER,156], "EUPWXCB19"[CHARACTER,156], "EUPWXCB20"[CHARACTER,156]
      10 - "ID"[NUMBER,22], "EUPWXCETB"[NUMBER,22], "EUPWXCPGF"[CHARACTER,120], 
           "EUPWXCLIG"[NUMBER,22], "EUPWXCELE"[CHARACTER,4], "EUPWXCTAI"[NUMBER,22], 
           "EUPWXCBA1"[CHARACTER,156], "EUPWXCBA2"[CHARACTER,156], "EUPWXCBA3"[CHARACTER,156], 
           "EUPWXCBA4"[CHARACTER,156], "EUPWXCBA5"[CHARACTER,156], "EUPWXCBA6"[CHARACTER,156], 
           "EUPWXCBA7"[CHARACTER,156], "EUPWXCBA8"[CHARACTER,156], "EUPWXCBA9"[CHARACTER,156], 
           "EUPWXCB10"[CHARACTER,156], "EUPWXCB11"[CHARACTER,156], "EUPWXCB12"[CHARACTER,156], 
           "EUPWXCB13"[CHARACTER,156], "EUPWXCB14"[CHARACTER,156], "EUPWXCB15"[CHARACTER,156], 
           "EUPWXCB16"[CHARACTER,156], "EUPWXCB17"[CHARACTER,156], "EUPWXCB18"[CHARACTER,156], 
           "EUPWXCB19"[CHARACTER,156], "EUPWXCB20"[CHARACTER,156], "EUPWXCDON"[VARCHAR2,1200]
      11 - "ZEUPWXC0".ROWID[ROWID,10], "EUPWXCETB"[NUMBER,22], 
           "EUPWXCPGF"[CHARACTER,120], "EUPWXCBA1"[CHARACTER,156], "EUPWXCBA2"[CHARACTER,156], 
           "EUPWXCBA3"[CHARACTER,156], "EUPWXCBA4"[CHARACTER,156], "EUPWXCBA5"[CHARACTER,156], 
           "EUPWXCBA6"[CHARACTER,156], "EUPWXCBA7"[CHARACTER,156], "EUPWXCBA8"[CHARACTER,156], 
           "EUPWXCBA9"[CHARACTER,156], "EUPWXCB10"[CHARACTER,156], "EUPWXCB11"[CHARACTER,156], 
           "EUPWXCB12"[CHARACTER,156], "EUPWXCB13"[CHARACTER,156], "EUPWXCB14"[CHARACTER,156], 
           "EUPWXCB15"[CHARACTER,156], "EUPWXCB16"[CHARACTER,156], "EUPWXCB17"[CHARACTER,156], 
           "EUPWXCB18"[CHARACTER,156], "EUPWXCB19"[CHARACTER,156], "EUPWXCB20"[CHARACTER,156]
      12 - "ID"[NUMBER,22], "EUPWXCETB"[NUMBER,22], "EUPWXCPGF"[CHARACTER,120], 
           "EUPWXCLIG"[NUMBER,22], "EUPWXCELE"[CHARACTER,4], "EUPWXCTAI"[NUMBER,22], 
           "EUPWXCBA1"[CHARACTER,156], "EUPWXCBA2"[CHARACTER,156], "EUPWXCBA3"[CHARACTER,156], 
           "EUPWXCBA4"[CHARACTER,156], "EUPWXCBA5"[CHARACTER,156], "EUPWXCBA6"[CHARACTER,156], 
           "EUPWXCBA7"[CHARACTER,156], "EUPWXCBA8"[CHARACTER,156], "EUPWXCBA9"[CHARACTER,156], 
           "EUPWXCB10"[CHARACTER,156], "EUPWXCB11"[CHARACTER,156], "EUPWXCB12"[CHARACTER,156], 
           "EUPWXCB13"[CHARACTER,156], "EUPWXCB14"[CHARACTER,156], "EUPWXCB15"[CHARACTER,156], 
           "EUPWXCB16"[CHARACTER,156], "EUPWXCB17"[CHARACTER,156], "EUPWXCB18"[CHARACTER,156], 
           "EUPWXCB19"[CHARACTER,156], "EUPWXCB20"[CHARACTER,156], "EUPWXCDON"[VARCHAR2,1200]
      13 - "ZEUPWXC0".ROWID[ROWID,10], "EUPWXCETB"[NUMBER,22], 
           "EUPWXCPGF"[CHARACTER,120], "EUPWXCBA1"[CHARACTER,156], "EUPWXCBA2"[CHARACTER,156], 
           "EUPWXCBA3"[CHARACTER,156], "EUPWXCBA4"[CHARACTER,156], "EUPWXCBA5"[CHARACTER,156], 
           "EUPWXCBA6"[CHARACTER,156], "EUPWXCBA7"[CHARACTER,156], "EUPWXCBA8"[CHARACTER,156], 
           "EUPWXCBA9"[CHARACTER,156], "EUPWXCB10"[CHARACTER,156], "EUPWXCB11"[CHARACTER,156], 
           "EUPWXCB12"[CHARACTER,156], "EUPWXCB13"[CHARACTER,156], "EUPWXCB14"[CHARACTER,156], 
           "EUPWXCB15"[CHARACTER,156], "EUPWXCB16"[CHARACTER,156], "EUPWXCB17"[CHARACTER,156], 
           "EUPWXCB18"[CHARACTER,156], "EUPWXCB19"[CHARACTER,156], "EUPWXCB20"[CHARACTER,156]

  13. #13
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Points : 1 359
    Points
    1 359
    Par défaut
    Citation Envoyé par grouhan Voir le message
    Nous sommes en Entreprise Edition et le plan d'exécution de semble pas montrer qu'une parallélisation est faite. La requête utilise actuellement un hint INDEX_ASC ce qui force l'optimizer à utiliser l'index correspondant à l'ordre des données souhaités.
    A ce jour pas d'utilisation de Order by et du coup il n'y a qu'un tri sur chaque sous requête mais comme il n'y a pas eu d'incident à ce jour (requêtes en place depuis plusieurs années) le résultat retourné doit également se faire dans l'ordre des sous-requêtes.
    Premièrement : sans un ORDER BY il n'y aucune garantie que votre résultat soit trié. Aucune garantie. Soyez en certain.

    Deuxièmement : sous le mode FIRST_ROWS, lorsqu'une requête utilise un ORDER BY, et qu'il existe un index commençant par les colonnes de cet ORDER BY, Oracle va systématiquement éviter de faire un ORDER BY en utilisant un INDEX FULL SCAN. Ceci se fera nonobstant la taille de cet index ainsi que le coût qu'il faudra dépenser pour traverser cet index du premier leaf block jusqu'au dernier leaf block dans l'ordre (index FULL scan)

    https://hourim.wordpress.com/2012/03...nd-first_rows/

    Troisièmement : puisque votre plan d'exécution utilise un INDEX RANGE SCAN (à cause du hint INDEX_ASC), c'est la preuve formelle que votre résultat n'est pas forcément trié.

    Je vous conseille ceci:

    1. ajouter un ORDER BY si l'ordre vous importe
    2. supprimer les deux hints first_rows et index_asc
    3. tester


    Je ne conseille pratiquement jamais d'utiliser le hint FIRST_ROWS, mais en dernier recours, si la performance ne vous convient pas après avoir implémenté les deux premiers points ci-dessus, remettez de nouveau le hint FIRST_ROWS (tout en laissant l'ORDER BY) et vérifier si vous avez un index FULL SCAN dans le nouveau plan d'exécution et si le temps de la requête vous convient sous ce mode très ''buggé''

    Bien à vous
    Mohamed
    Bien Respectueusement
    www.hourim.wordpress.com

    "Ce qui se conçoit bien s'énonce clairement"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Illegal mix of collations avec UNION ALL
    Par lodan dans le forum Outils
    Réponses: 1
    Dernier message: 03/05/2007, 18h05
  2. order by avec un union ALL
    Par roxxxy dans le forum Langage SQL
    Réponses: 1
    Dernier message: 20/03/2007, 15h59
  3. UNION ALL et ORDER BY
    Par roxxxy dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/03/2007, 15h36
  4. Calcul de % sur une requête UNION ALL
    Par lodan dans le forum Langage SQL
    Réponses: 4
    Dernier message: 08/03/2007, 14h20
  5. union all couteux ?
    Par Maitre B dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 16/11/2004, 09h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo