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

Oracle Discussion :

Temps d'exécution de jointure externe long sous Oracle


Sujet :

Oracle

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 98
    Points : 45
    Points
    45
    Par défaut Temps d'exécution de jointure externe long sous Oracle
    Bonjour, j'ai une requête sql qui prend énormément de temps à s'exécuter en jointure externe gauche(LEFT JOIN), alors que si je fais une jointure interne(INNER JOIN) en récupérant ceux qui respectent le critère de jointure c'est à dire ceux qui ont des données a droite dans une CTE et les exclure ces lignes dans la jointure la requête s'exécute plus rapidement. j'aimerais qu'on m'aide à optimisé cette requête:
    Voici la première requete avec toutes les lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select /*+ GATHER_PLAN_STATISTICS */distinct t.NUM_PIECE_INTERNE "PIECE INTERNE",t.NUM_PIECE as NUM_PIECE_E,TO_CHAR(t.date_achat ,'DD/MM/YYYY')"DATE ENVOI",t.VALEUR "VALEUR ENVOI",t.tiers ||' : ' || e.description as Receveur,p.NUM_PIECE as NUM_PIECE_R,TO_CHAR(p.date_achat ,'DD/MM/YYYY') "DATE RECEPTION",p.VALEUR "VALEUR RECEPTION",t.VALEUR+p.VALEUR as Ecart 
    from achat t
    left join etablissement e on t.tiers= e.code_etabl
    left JOIN achat p on TRANSLATE(t.NUM_PIECE_INTERNE , '0123456789' || t.NUM_PIECE_INTERNE, '0123456789')=TRANSLATE(p.NUM_PIECE_INTERNE , '0123456789' || p.NUM_PIECE_INTERNE, '0123456789') and p.designation LIKE 'BON de RECEPTION de TRANSFERT%' and p.NUM_PIECE_INTERNE not in (select num_piece_interne from achat where designation LIKE 'ANNULATION d''un BON de RECEPTION de TRANSFERT%') and 
    p.tiers= t.code_etabl and p.CODE_ETABL=t.tiers
     where t.CODE_ETABL ='432' AND t.designation LIKE 'BON d'' EXPEDITION de TRANSFERT%' and t.NUM_PIECE_INTERNE not in (select num_piece_interne from achat where designation LIKE 'ANNULATION d''un BON d'' EXPEDITION de TRANSFERT%')
    and t.date_achat between '01/01/2013' and '18/11/2013' AND p.NUM_PIECE is null order by t.NUM_PIECE_INTERNE asc
    et voici ses statistiques:
    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
    PLAN_TABLE_OUTPUT                                                                                                                                                                                                                                                                                            
    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
    SQL_ID  16tfxvhh1ydhk, child number 0                                                                                                                                                                                                                                                                        
    -------------------------------------                                                                                                                                                                                                                                                                        
    select /*+ GATHER_PLAN_STATISTICS */distinct t.NUM_PIECE_INTERNE "PIECE                                                                                                                                                                                                                                      
    INTERNE",t.NUM_PIECE as NUM_PIECE_E,TO_CHAR(t.date_achat                                                                                                                                                                                                                                                     
    ,'DD/MM/YYYY')"DATE ENVOI",t.VALEUR "VALEUR ENVOI",t.tiers ||' : ' ||                                                                                                                                                                                                                                        
    e.description as Receveur,p.NUM_PIECE as                                                                                                                                                                                                                                                                     
    NUM_PIECE_R,TO_CHAR(p.date_achat ,'DD/MM/YYYY') "DATE                                                                                                                                                                                                                                                        
    RECEPTION",p.VALEUR "VALEUR RECEPTION",t.VALEUR+p.VALEUR as Ecart  from                                                                                                                                                                                                                                      
    achat t left join etablissement e on t.tiers= e.code_etabl left JOIN                                                                                                                                                                                                                                         
    achat p on TRANSLATE(t.NUM_PIECE_INTERNE , '0123456789' ||                                                                                                                                                                                                                                                   
    t.NUM_PIECE_INTERNE, '0123456789')=TRANSLATE(p.NUM_PIECE_INTERNE ,                                                                                                                                                                                                                                           
    '0123456789' || p.NUM_PIECE_INTERNE, '0123456789') and p.designation                                                                                                                                                                                                                                         
    LIKE 'BON de RECEPTION de TRANSFERT%' and p.NUM_PIECE_INTERNE not in                                                                                                                                                                                                                                         
    (select num_piece_interne from achat where designation LIKE 'ANNULATION                                                                                                                                                                                                                                      
    d''un BON de RECEPTION de TRANSFERT%') and  p.tiers= t.code_etabl and                                                                                                                                                                                                                                        
    p.CODE_ETABL=t.tiers  where t.CODE_ETABL ='432' AND t.designation LIKE                                                                                                                                                                                                                                       
    'BON d'' EXPEDITION de TRANSFERT%' and t.NUM_PIECE_INTERNE not in                                                                                                                                                                                                                                            
    (select num_piece_inte                                                                                                                                                                                                                                                                                       
     
    Plan hash value: 1999085137                                                                                                                                                                                                                                                                                  
     
    ----------------------------------------------------------------------------------------------------------------------------------------------------                                                                                                                                                         
    | Id  | Operation                         | Name             | Starts | E-Rows | A-Rows |   A-Time   | Buffers | Reads  |  OMem |  1Mem | Used-Mem |                                                                                                                                                         
    ----------------------------------------------------------------------------------------------------------------------------------------------------                                                                                                                                                         
    |   0 | SELECT STATEMENT                  |                  |      1 |        |    200 |00:11:08.77 |    5249K|   5067K|       |       |          |                                                                                                                                                         
    |   1 |  SORT ORDER BY                    |                  |      1 |      1 |    200 |00:11:08.77 |    5249K|   5067K| 33792 | 33792 |30720  (0)|                                                                                                                                                         
    |   2 |   HASH UNIQUE                     |                  |      1 |      1 |    200 |00:11:08.77 |    5249K|   5067K|   721K|   721K| 1275K (0)|                                                                                                                                                         
    |*  3 |    FILTER                         |                  |      1 |        |    200 |00:15:01.60 |    5249K|   5067K|       |       |          |                                                                                                                                                         
    |   4 |     NESTED LOOPS OUTER            |                  |      1 |      1 |    767 |00:10:14.11 |    5249K|   5067K|       |       |          |                                                                                                                                                         
    |   5 |      NESTED LOOPS OUTER           |                  |      1 |      2 |    765 |00:00:02.96 |    9771 |   8931 |       |       |          |                                                                                                                                                         
    |*  6 |       HASH JOIN ANTI NA           |                  |      1 |      2 |    765 |00:00:02.90 |    9012 |   8929 |   752K|   752K| 1238K (0)|                                                                                                                                                         
    |*  7 |        TABLE ACCESS BY INDEX ROWID| ACHAT            |      1 |    234 |    918 |00:00:00.09 |     401 |    328 |       |       |          |                                                                                                                                                         
    |*  8 |         INDEX RANGE SCAN          | INDEXCODE_ETABLA |      1 |   4925 |   4100 |00:00:00.03 |      11 |     10 |       |       |          |                                                                                                                                                         
    |*  9 |        TABLE ACCESS FULL          | ACHAT            |      1 |   8016 |   2274 |00:00:01.03 |    8611 |   8601 |       |       |          |                                                                                                                                                         
    |  10 |       TABLE ACCESS BY INDEX ROWID | ETABLISSEMENT    |    765 |      1 |    755 |00:00:00.05 |     759 |      2 |       |       |          |                                                                                                                                                         
    |* 11 |        INDEX UNIQUE SCAN          | ETABL_CODE_ETABL |    765 |      1 |    755 |00:00:00.03 |       4 |      1 |       |       |          |                                                                                                                                                         
    |  12 |      VIEW                         |                  |    765 |      1 |    567 |00:12:08.02 |    5239K|   5059K|       |       |          |                                                                                                                                                         
    |* 13 |       HASH JOIN ANTI NA           |                  |    765 |      1 |    567 |00:12:08.02 |    5239K|   5059K|   769K|   769K|  409K (0)|                                                                                                                                                         
    |* 14 |        TABLE ACCESS BY INDEX ROWID| ACHAT            |    765 |      1 |    609 |00:00:06.89 |     176K|   1675 |       |       |          |                                                                                                                                                         
    |* 15 |         INDEX RANGE SCAN          | INDEXCODE_ETABLA |    765 |    335 |   1481K|00:00:01.69 |   25784 |    536 |       |       |          |                                                                                                                                                         
    |* 16 |        TABLE ACCESS FULL          | ACHAT            |    588 |   8016 |   6706K|00:02:37.15 |    5063K|   5057K|       |       |          |                                                                                                                                                         
    ----------------------------------------------------------------------------------------------------------------------------------------------------                                                                                                                                                         
     
    Predicate Information (identified by operation id):                                                                                                                                                                                                                                                          
    ---------------------------------------------------                                                                                                                                                                                                                                                          
     
       3 - filter("P"."NUM_PIECE" IS NULL)                                                                                                                                                                                                                                                                       
       6 - access("T"."NUM_PIECE_INTERNE"="NUM_PIECE_INTERNE")                                                                                                                                                                                                                                                   
       7 - filter(("T"."DESIGNATION" LIKE 'BON d'' EXPEDITION de TRANSFERT%' AND "T"."DATE_ACHAT">=TO_DATE(' 2013-01-01 00:00:00', 'syyyy-mm-dd                                                                                                                                                                  
                  hh24:mi:ss') AND "T"."DATE_ACHAT"<=TO_DATE(' 2013-11-18 00:00:00', 'syyyy-mm-dd hh24:mi:ss')))                                                                                                                                                                                                 
       8 - access("T"."CODE_ETABL"='432')                                                                                                                                                                                                                                                                        
       9 - filter("DESIGNATION" LIKE 'ANNULATION d''un BON d'' EXPEDITION de TRANSFERT%')                                                                                                                                                                                                                        
      11 - access("T"."TIERS"="E"."CODE_ETABL")                                                                                                                                                                                                                                                                  
      13 - access("P"."NUM_PIECE_INTERNE"="NUM_PIECE_INTERNE")                                                                                                                                                                                                                                                   
      14 - filter(("P"."TIERS"="T"."CODE_ETABL" AND "P"."DESIGNATION" LIKE 'BON de RECEPTION de TRANSFERT%' AND                                                                                                                                                                                                  
                  TRANSLATE("T"."NUM_PIECE_INTERNE",'0123456789'||"T"."NUM_PIECE_INTERNE",'0123456789')=TRANSLATE("P"."NUM_PIECE_INTERNE",'0123456789'||"P"."N                                                                                                                                                   
                  UM_PIECE_INTERNE",'0123456789')))                                                                                                                                                                                                                                                              
      15 - access("P"."CODE_ETABL"="T"."TIERS")                                                                                                                                                                                                                                                                  
      16 - filter("DESIGNATION" LIKE 'ANNULATION d''un BON de RECEPTION de TRANSFERT%')
    pour la seconde requête avec les lignes respectant la jointure exclues:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    with AZ as(select distinct t.NUM_PIECE_INTERNE "PIECE INTERNE",t.NUM_PIECE as NUM_PIECE_E,p.NUM_PIECE as NUM_PIECE_R
    from achat t
    left join etablissement e on t.tiers= e.code_etabl
    inner JOIN achat p on TRANSLATE(t.NUM_PIECE_INTERNE , '0123456789' || t.NUM_PIECE_INTERNE, '0123456789')=TRANSLATE(p.NUM_PIECE_INTERNE , '0123456789' || p.NUM_PIECE_INTERNE, '0123456789') and p.designation LIKE 'BON de RECEPTION de TRANSFERT%' and p.NUM_PIECE_INTERNE not in (select num_piece_interne from achat where designation LIKE 'ANNULATION d''un BON de RECEPTION de TRANSFERT%') and 
    p.tiers= t.code_etabl and p.CODE_ETABL=t.tiers 
     where t.CODE_ETABL ='432' AND t.designation LIKE 'BON d'' EXPEDITION de TRANSFERT%' and t.NUM_PIECE_INTERNE not in (select num_piece_interne from achat where designation LIKE 'ANNULATION d''un BON d'' EXPEDITION de TRANSFERT%')
    and t.date_achat between '01/01/2013' and '18/11/2013' order by t.NUM_PIECE_INTERNE asc)
    select /*+ GATHER_PLAN_STATISTICS */distinct t.NUM_PIECE_INTERNE "PIECE INTERNE",t.NUM_PIECE as NUM_PIECE_E,TO_CHAR(t.date_achat ,'DD/MM/YYYY')"DATE ENVOI",t.VALEUR "VALEUR ENVOI",t.tiers ||' : ' || e.description as Receveur,p.NUM_PIECE as NUM_PIECE_R,TO_CHAR(p.date_achat ,'DD/MM/YYYY') "DATE RECEPTION",p.VALEUR "VALEUR RECEPTION",t.VALEUR+p.VALEUR as Ecart 
    from achat t
    left join etablissement e on t.tiers= e.code_etabl
    left JOIN achat p on TRANSLATE(t.NUM_PIECE_INTERNE , '0123456789' || t.NUM_PIECE_INTERNE, '0123456789')=TRANSLATE(p.NUM_PIECE_INTERNE , '0123456789' || p.NUM_PIECE_INTERNE, '0123456789') and p.designation LIKE 'BON de RECEPTION de TRANSFERT%' and p.NUM_PIECE_INTERNE not in (select num_piece_interne from achat where designation LIKE 'ANNULATION d''un BON de RECEPTION de TRANSFERT%') and 
    p.tiers= t.code_etabl and p.CODE_ETABL=t.tiers 
     where t.CODE_ETABL ='432' AND t.designation LIKE 'BON d'' EXPEDITION de TRANSFERT%' and t.NUM_PIECE_INTERNE not in (select num_piece_interne from achat where designation LIKE 'ANNULATION d''un BON d'' EXPEDITION de TRANSFERT%')
    and t.date_achat between '01/01/2013' and '18/11/2013' AND t.NUM_PIECE not in (select NUM_PIECE_E from AZ) order by t.NUM_PIECE_INTERNE asc
    voici ses statisques:
    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
    PLAN_TABLE_OUTPUT                                                                                                                                                                                                                                                                                            
    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
    SQL_ID  6xqj632pz0sv5, child number 0                                                                                                                                                                                                                                                                        
    -------------------------------------                                                                                                                                                                                                                                                                        
    with AZ as(select distinct t.NUM_PIECE_INTERNE "PIECE                                                                                                                                                                                                                                                        
    INTERNE",t.NUM_PIECE as NUM_PIECE_E,p.NUM_PIECE as NUM_PIECE_R from                                                                                                                                                                                                                                          
    achat t left join etablissement e on t.tiers= e.code_etabl inner JOIN                                                                                                                                                                                                                                        
    achat p on TRANSLATE(t.NUM_PIECE_INTERNE , '0123456789' ||                                                                                                                                                                                                                                                   
    t.NUM_PIECE_INTERNE, '0123456789')=TRANSLATE(p.NUM_PIECE_INTERNE ,                                                                                                                                                                                                                                           
    '0123456789' || p.NUM_PIECE_INTERNE, '0123456789') and p.designation                                                                                                                                                                                                                                         
    LIKE 'BON de RECEPTION de TRANSFERT%' and p.NUM_PIECE_INTERNE not in                                                                                                                                                                                                                                         
    (select num_piece_interne from achat where designation LIKE 'ANNULATION                                                                                                                                                                                                                                      
    d''un BON de RECEPTION de TRANSFERT%') and  p.tiers= t.code_etabl and                                                                                                                                                                                                                                        
    p.CODE_ETABL=t.tiers   where t.CODE_ETABL ='432' AND t.designation LIKE                                                                                                                                                                                                                                      
    'BON d'' EXPEDITION de TRANSFERT%' and t.NUM_PIECE_INTERNE not in                                                                                                                                                                                                                                            
    (select num_piece_interne from achat where designation LIKE 'ANNULATION                                                                                                                                                                                                                                      
    d''un BON d'' EXPEDITION de TRANSFERT%') and t.date_achat between                                                                                                                                                                                                                                            
    '01/01/2013' and '18/11/2013' order by t.NUM_PIECE_INTERNE asc) select                                                                                                                                                                                                                                       
    /*+ GATHER_PLAN_STATISTICS */distinct t.NUM_PIECE_INTER                                                                                                                                                                                                                                                      
     
    Plan hash value: 716002260                                                                                                                                                                                                                                                                                   
     
    ----------------------------------------------------------------------------------------------------------------------------------------------------------                                                                                                                                                   
    | Id  | Operation                               | Name             | Starts | E-Rows | A-Rows |   A-Time   | Buffers | Reads  |  OMem |  1Mem | Used-Mem |                                                                                                                                                   
    ----------------------------------------------------------------------------------------------------------------------------------------------------------                                                                                                                                                   
    |   0 | SELECT STATEMENT                        |                  |      1 |        |    200 |00:00:37.50 |     458K|    223K|       |       |          |                                                                                                                                                   
    |   1 |  SORT ORDER BY                          |                  |      1 |      1 |    200 |00:00:37.50 |     458K|    223K| 33792 | 33792 |30720  (0)|                                                                                                                                                   
    |   2 |   HASH UNIQUE                           |                  |      1 |      1 |    200 |00:00:37.50 |     458K|    223K|   721K|   721K| 1249K (0)|                                                                                                                                                   
    |   3 |    NESTED LOOPS OUTER                   |                  |      1 |      1 |    200 |00:02:09.55 |     458K|    223K|       |       |          |                                                                                                                                                   
    |   4 |     NESTED LOOPS OUTER                  |                  |      1 |      1 |    200 |00:00:07.12 |     207K|  26090 |       |       |          |                                                                                                                                                   
    |*  5 |      HASH JOIN ANTI NA                  |                  |      1 |      1 |    200 |00:00:07.11 |     207K|  26090 |   752K|   752K| 1181K (0)|                                                                                                                                                   
    |*  6 |       HASH JOIN ANTI NA                 |                  |      1 |      2 |    765 |00:00:01.24 |    9012 |   8646 |   752K|   752K| 1219K (0)|                                                                                                                                                   
    |*  7 |        TABLE ACCESS BY INDEX ROWID      | ACHAT            |      1 |    234 |    918 |00:00:00.04 |     401 |     45 |       |       |          |                                                                                                                                                   
    |*  8 |         INDEX RANGE SCAN                | INDEXCODE_ETABLA |      1 |   4925 |   4100 |00:00:00.01 |      11 |      7 |       |       |          |                                                                                                                                                   
    |*  9 |        TABLE ACCESS FULL                | ACHAT            |      1 |   8016 |   2274 |00:00:00.31 |    8611 |   8601 |       |       |          |                                                                                                                                                   
    |  10 |       VIEW                              |                  |      1 |      1 |    567 |00:00:05.87 |     198K|  17444 |       |       |          |                                                                                                                                                   
    |  11 |        SORT ORDER BY                    |                  |      1 |      1 |    567 |00:00:05.87 |     198K|  17444 | 43008 | 43008 |38912  (0)|                                                                                                                                                   
    |  12 |         HASH UNIQUE                     |                  |      1 |      1 |    567 |00:00:05.87 |     198K|  17444 |   776K|   776K| 1223K (0)|                                                                                                                                                   
    |* 13 |          HASH JOIN ANTI NA              |                  |      1 |      1 |    567 |00:00:05.86 |     198K|  17444 |   780K|   780K| 1233K (0)|                                                                                                                                                   
    |  14 |           NESTED LOOPS                  |                  |      1 |        |    652 |00:00:04.96 |     189K|   8843 |       |       |          |                                                                                                                                                   
    |  15 |            NESTED LOOPS                 |                  |      1 |      1 |    400K|00:00:01.91 |   11455 |   8664 |       |       |          |                                                                                                                                                   
    |* 16 |             HASH JOIN ANTI NA           |                  |      1 |      1 |    729 |00:00:01.60 |    9168 |   8614 |   797K|   797K| 1243K (0)|                                                                                                                                                   
    |* 17 |              TABLE ACCESS BY INDEX ROWID| ACHAT            |      1 |     94 |    804 |00:00:01.08 |     557 |     13 |       |       |          |                                                                                                                                                   
    |* 18 |               INDEX RANGE SCAN          | INDEXTIERSA      |      1 |   1983 |   1369 |00:00:00.03 |       6 |      5 |       |       |          |                                                                                                                                                   
    |* 19 |              TABLE ACCESS FULL          | ACHAT            |      1 |   8016 |  11405 |00:00:00.05 |    8611 |   8601 |       |       |          |                                                                                                                                                   
    |* 20 |             INDEX RANGE SCAN            | INDEXTIERSA      |    729 |    518 |    400K|00:00:00.34 |    2287 |     50 |       |       |          |                                                                                                                                                   
    |* 21 |            TABLE ACCESS BY INDEX ROWID  | ACHAT            |    400K|      1 |    652 |00:00:02.35 |     177K|    179 |       |       |          |                                                                                                                                                   
    |* 22 |           TABLE ACCESS FULL             | ACHAT            |      1 |   8016 |   2274 |00:00:00.34 |    8611 |   8601 |       |       |          |                                                                                                                                                   
    |  23 |      TABLE ACCESS BY INDEX ROWID        | ETABLISSEMENT    |    200 |      1 |    190 |00:00:00.01 |     194 |      0 |       |       |          |                                                                                                                                                   
    |* 24 |       INDEX UNIQUE SCAN                 | ETABL_CODE_ETABL |    200 |      1 |    190 |00:00:00.01 |       4 |      0 |       |       |          |                                                                                                                                                   
    |  25 |     VIEW                                |                  |    200 |      1 |      0 |00:00:30.38 |     251K|    197K|       |       |          |                                                                                                                                                   
    |* 26 |      HASH JOIN ANTI NA                  |                  |    200 |      1 |      0 |00:00:30.38 |     251K|    197K|   719K|   719K|  363K (0)|                                                                                                                                                   
    |* 27 |       TABLE ACCESS BY INDEX ROWID       | ACHAT            |    200 |      1 |     38 |00:00:00.45 |   53437 |      0 |       |       |          |                                                                                                                                                   
    |* 28 |        INDEX RANGE SCAN                 | INDEXCODE_ETABLA |    200 |    335 |    308K|00:00:00.20 |   21556 |      0 |       |       |          |                                                                                                                                                   
    |* 29 |       TABLE ACCESS FULL                 | ACHAT            |     23 |   8016 |    262K|00:00:05.38 |     198K|    197K|       |       |          |                                                                                                                                                   
    ----------------------------------------------------------------------------------------------------------------------------------------------------------                                                                                                                                                   
     
    Predicate Information (identified by operation id):                                                                                                                                                                                                                                                          
    ---------------------------------------------------                                                                                                                                                                                                                                                          
     
       5 - access("T"."NUM_PIECE"="NUM_PIECE_E")                                                                                                                                                                                                                                                                 
       6 - access("T"."NUM_PIECE_INTERNE"="NUM_PIECE_INTERNE")                                                                                                                                                                                                                                                   
       7 - filter(("T"."DESIGNATION" LIKE 'BON d'' EXPEDITION de TRANSFERT%' AND "T"."DATE_ACHAT">=TO_DATE(' 2013-01-01 00:00:00', 'syyyy-mm-dd                                                                                                                                                                  
                  hh24:mi:ss') AND "T"."DATE_ACHAT"<=TO_DATE(' 2013-11-18 00:00:00', 'syyyy-mm-dd hh24:mi:ss')))                                                                                                                                                                                                 
       8 - access("T"."CODE_ETABL"='432')                                                                                                                                                                                                                                                                        
       9 - filter("DESIGNATION" LIKE 'ANNULATION d''un BON d'' EXPEDITION de TRANSFERT%')                                                                                                                                                                                                                        
      13 - access("T"."NUM_PIECE_INTERNE"="NUM_PIECE_INTERNE")                                                                                                                                                                                                                                                   
      16 - access("P"."NUM_PIECE_INTERNE"="NUM_PIECE_INTERNE")                                                                                                                                                                                                                                                   
      17 - filter("P"."DESIGNATION" LIKE 'BON de RECEPTION de TRANSFERT%')                                                                                                                                                                                                                                       
      18 - access("P"."TIERS"='432')                                                                                                                                                                                                                                                                             
      19 - filter("DESIGNATION" LIKE 'ANNULATION d''un BON de RECEPTION de TRANSFERT%')                                                                                                                                                                                                                          
      20 - access("P"."CODE_ETABL"="T"."TIERS")                                                                                                                                                                                                                                                                  
      21 - filter(("T"."CODE_ETABL"='432' AND "T"."DESIGNATION" LIKE 'BON d'' EXPEDITION de TRANSFERT%' AND "T"."DATE_ACHAT">=TO_DATE(' 2013-01-01                                                                                                                                                               
                  00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND "T"."DATE_ACHAT"<=TO_DATE(' 2013-11-18 00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND                                                                                                                                                                       
                  TRANSLATE("T"."NUM_PIECE_INTERNE",'0123456789'||"T"."NUM_PIECE_INTERNE",'0123456789')=TRANSLATE("P"."NUM_PIECE_INTERNE",'0123456789'||"P"."NUM_PIE                                                                                                                                             
                  CE_INTERNE",'0123456789')))                                                                                                                                                                                                                                                                    
      22 - filter("DESIGNATION" LIKE 'ANNULATION d''un BON d'' EXPEDITION de TRANSFERT%')                                                                                                                                                                                                                        
      24 - access("T"."TIERS"="E"."CODE_ETABL")                                                                                                                                                                                                                                                                  
      26 - access("P"."NUM_PIECE_INTERNE"="NUM_PIECE_INTERNE")                                                                                                                                                                                                                                                   
      27 - filter(("P"."TIERS"="T"."CODE_ETABL" AND "P"."DESIGNATION" LIKE 'BON de RECEPTION de TRANSFERT%' AND                                                                                                                                                                                                  
                  TRANSLATE("T"."NUM_PIECE_INTERNE",'0123456789'||"T"."NUM_PIECE_INTERNE",'0123456789')=TRANSLATE("P"."NUM_PIECE_INTERNE",'0123456789'||"P"."NUM_PIE                                                                                                                                             
                  CE_INTERNE",'0123456789')))                                                                                                                                                                                                                                                                    
      28 - access("P"."CODE_ETABL"="T"."TIERS")                                                                                                                                                                                                                                                                  
      29 - filter("DESIGNATION" LIKE 'ANNULATION d''un BON de RECEPTION de TRANSFERT%')                                                                                                                                                                                                                          
     
     
    83 rows selected
    Merci de m'apporter votre aide car j'ai besoin d'utiliser la première requete du faite qu'il y'a des établissemnt qui possèdent plus de lignes et donc la seconde requete dure a ce niveau. Ou si ya des possibilités d'amélioration avec de la requête. je précise que la requête s’exécute plus vite en jointure interne ou externe droite

  2. #2
    Membre éclairé Avatar de jkofr
    Homme Profil pro
    Senior Consultant DBA (Trivadis SA)
    Inscrit en
    Octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Senior Consultant DBA (Trivadis SA)
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 484
    Points : 724
    Points
    724
    Par défaut
    Hello,

    Un dėtail, je vois pas l'utilité des 2 sub query dans ton cas

    Jko
    OCM 11g, RAC and Performance & Tuning Expert 11g
    RMAN Backup & Recovery, Data Guard and Grid Control

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 98
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par jkofr Voir le message
    Hello,

    Un dėtail, je vois pas l'utilité des 2 sub query dans ton cas

    Jko
    Merci de me répondre L'utilité des 2 sub query :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    p.NUM_PIECE_INTERNE NOT IN (SELECT num_piece_interne FROM achat WHERE designation LIKE 'ANNULATION d''un BON de RECEPTION de TRANSFERT%') et
    t.NUM_PIECE_INTERNE NOT IN (SELECT num_piece_interne FROM achat WHERE designation LIKE 'ANNULATION d''un BON d'' EXPEDITION de TRANSFERT%')
    est d'éviter de prendre en compte les pièces qui ont été annulés car une pièce peut être saisie et être annulée par la suite d'une erreur.

  4. #4
    Membre éclairé Avatar de jkofr
    Homme Profil pro
    Senior Consultant DBA (Trivadis SA)
    Inscrit en
    Octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Senior Consultant DBA (Trivadis SA)
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 484
    Points : 724
    Points
    724
    Par défaut
    Ok pas de problème pour la clause, mais pourquoi ne pas la mettre au niveau de la main query?

    jko
    OCM 11g, RAC and Performance & Tuning Expert 11g
    RMAN Backup & Recovery, Data Guard and Grid Control

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 98
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par jkofr Voir le message
    mais pourquoi ne pas la mettre au niveau de la main query?

    jko
    Je comprends pas ce que vous voulez dire par là. Puis-je avoir un exemple du syntaxe

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 98
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par jkofr Voir le message
    mais pourquoi ne pas la mettre au niveau de la main query?

    jko
    Je suppose que vous faites allusion au faite que je devais pas mettre les sub query mais plutot mettre cette condition dans la requete principale et non dans un sub query. Cependant je peux pas savoir quelles sont les piece_interne qui ont été annulées qu'a travers leur désignation. c'est à dire une pièce peut être saisie et ensuite être annulée donc pour récupérer que les pièces qui n'ont pas été annulées il me faut exclure ceux qui ont été annulées car c'est le même numéro de pièce qui est saisie lorsqu'on annule une pièce. Ainsi ce sub query me permet de savoir quelles sont les pièces qui ont été saisies en entrées et ensuite annulées.

  7. #7
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Vos stats ne semblent pas à jour, vous devriez les recalculer.

    Concernant la requête vous semblez avoir un gros problème de modélisation, la jointure avec translate est tout de même très étrange...

    Avez vous la possibilité de créer des indexs ?
    Si possible je tenterais un index sur (designation, num_piece_interne) compressé si possible.
    Et un sur (CODE_ETABL, TIERS, TRANSLATE(NUM_PIECE_INTERNE,'0123456789'||NUM_PIECE_INTERNE,'0123456789'), DESIGNATION) sans conviction sur l'ordre des colonnes dans l'index (menez des tests si nécessaire) à voir même si la colonne DESIGNATION a sa place dans l'index (elle semble quand même bien filtrante au moins pour ANNULATION d''un BON d' EXPEDITION de TRANSFERT%)

    PS : cette jointure est bien volontaire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AND p.tiers= t.code_etabl 
       AND p.CODE_ETABL=t.tiers
    Par ailleurs vous devriez utiliser to_date explicitement sur votre BETWEEN.

  8. #8
    Membre éclairé Avatar de jkofr
    Homme Profil pro
    Senior Consultant DBA (Trivadis SA)
    Inscrit en
    Octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Senior Consultant DBA (Trivadis SA)
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 484
    Points : 724
    Points
    724
    Par défaut
    Au niveau des stats je voyais aussi celles sur la table achat, mais pas évident que cela vienne des stats proprement dit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    |* 15 |         INDEX RANGE SCAN          | INDEXCODE_ETABLA |    765 |    335 |   1481K|00:00:01.69 |   25784 |    536 |       |       |          |                                                                                                                                                         
    |* 16 |        TABLE ACCESS FULL          | ACHAT            |    588 |   8016 |   6706K|00:02:37.15 |    5063K|   5057K|
    Je dirai peut-être que cela viendrait plutôt d'un défaut d'estimation dû au prédicat suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    16 - filter("DESIGNATION" LIKE 'ANNULATION d''un BON de RECEPTION de TRANSFERT%')
    tu aurai moyen de fournir un petit jeux de test?

    jko
    OCM 11g, RAC and Performance & Tuning Expert 11g
    RMAN Backup & Recovery, Data Guard and Grid Control

  9. #9
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    En fait pour les stats j'ai un doute, faut-il comparer A-Rows et E-Rows ou comparer A-Rows à Start*E-Rows (auquel cas les stats seraient valable)

  10. #10
    Membre éclairé Avatar de jkofr
    Homme Profil pro
    Senior Consultant DBA (Trivadis SA)
    Inscrit en
    Octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Senior Consultant DBA (Trivadis SA)
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 484
    Points : 724
    Points
    724
    Par défaut
    E-Rows= estimated rows
    A-Rows= actual rows

    Si actual est très différent de estimated, il y a un problème.

    Soit de stats non a jour
    Soit d’histogramme
    Soit les 2:-)

    jko
    OCM 11g, RAC and Performance & Tuning Expert 11g
    RMAN Backup & Recovery, Data Guard and Grid Control

  11. #11
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 98
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Vos stats ne semblent pas à jour, vous devriez les recalculer.
    voici les stats recalculés pour la première:
    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
     
    PLAN_TABLE_OUTPUT                                                                                                                                                                                                                                                                                            
    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
    SQL_ID  1spjpwqkhvtkb, child number 1                                                                                                                                                                                                                                                                        
    -------------------------------------                                                                                                                                                                                                                                                                        
    SELECT /*+ GATHER_PLAN_STATISTICS */DISTINCT t.NUM_PIECE_INTERNE "PIECE                                                                                                                                                                                                                                      
    INTERNE",t.NUM_PIECE AS NUM_PIECE_E,TO_CHAR(t.date_achat                                                                                                                                                                                                                                                     
    ,'DD/MM/YYYY')"DATE ENVOI",t.VALEUR "VALEUR ENVOI",t.tiers ||' : ' ||                                                                                                                                                                                                                                        
    e.description AS Receveur,p.NUM_PIECE AS                                                                                                                                                                                                                                                                     
    NUM_PIECE_R,TO_CHAR(p.date_achat ,'DD/MM/YYYY') "DATE                                                                                                                                                                                                                                                        
    RECEPTION",p.VALEUR "VALEUR RECEPTION",t.VALEUR+p.VALEUR AS Ecart  FROM                                                                                                                                                                                                                                      
    achat t LEFT JOIN etablissement e ON t.tiers= e.code_etabl LEFT JOIN                                                                                                                                                                                                                                         
    achat p ON TRANSLATE(t.NUM_PIECE_INTERNE , '0123456789' ||                                                                                                                                                                                                                                                   
    t.NUM_PIECE_INTERNE, '0123456789')=TRANSLATE(p.NUM_PIECE_INTERNE ,                                                                                                                                                                                                                                           
    '0123456789' || p.NUM_PIECE_INTERNE, '0123456789') AND p.designation                                                                                                                                                                                                                                         
    LIKE 'BON de RECEPTION de TRANSFERT%' AND p.NUM_PIECE_INTERNE NOT IN                                                                                                                                                                                                                                         
    (SELECT num_piece_interne FROM achat WHERE designation LIKE 'ANNULATION                                                                                                                                                                                                                                      
    d''un BON de RECEPTION de TRANSFERT%') AND  p.tiers= t.code_etabl AND                                                                                                                                                                                                                                        
    p.CODE_ETABL=t.tiers  WHERE t.CODE_ETABL ='432' AND t.designation LIKE                                                                                                                                                                                                                                       
    'BON d'' EXPEDITION de TRANSFERT%' AND t.NUM_PIECE_INTERNE NOT IN                                                                                                                                                                                                                                            
    (SELECT num_piece_inte                                                                                                                                                                                                                                                                                       
     
    Plan hash value: 766678730                                                                                                                                                                                                                                                                                   
     
    ----------------------------------------------------------------------------------------------------------------------------------------------------                                                                                                                                                         
    | Id  | Operation                         | Name             | Starts | E-Rows | A-Rows |   A-Time   | Buffers | Reads  |  OMem |  1Mem | Used-Mem |                                                                                                                                                         
    ----------------------------------------------------------------------------------------------------------------------------------------------------                                                                                                                                                         
    |   0 | SELECT STATEMENT                  |                  |      1 |        |    200 |00:12:29.86 |    5496K|   5065K|       |       |          |                                                                                                                                                         
    |   1 |  SORT ORDER BY                    |                  |      1 |      1 |    200 |00:12:29.86 |    5496K|   5065K| 33792 | 33792 |30720  (0)|                                                                                                                                                         
    |   2 |   HASH UNIQUE                     |                  |      1 |      1 |    200 |00:12:29.86 |    5496K|   5065K|   721K|   721K| 1264K (0)|                                                                                                                                                         
    |*  3 |    FILTER                         |                  |      1 |        |    200 |00:06:20.73 |    5496K|   5065K|       |       |          |                                                                                                                                                         
    |   4 |     NESTED LOOPS OUTER            |                  |      1 |      1 |    767 |00:12:47.19 |    5496K|   5065K|       |       |          |                                                                                                                                                         
    |*  5 |      HASH JOIN RIGHT ANTI NA      |                  |      1 |     23 |    765 |00:00:01.29 |    9015 |   8601 |   870K|   870K| 1255K (0)|                                                                                                                                                         
    |*  6 |       TABLE ACCESS FULL           | ACHAT            |      1 |   2274 |   2274 |00:00:00.34 |    8611 |   8601 |       |       |          |                                                                                                                                                         
    |*  7 |       HASH JOIN RIGHT OUTER       |                  |      1 |   2259 |    918 |00:00:00.03 |     404 |      0 |   821K|   821K| 1249K (0)|                                                                                                                                                         
    |   8 |        TABLE ACCESS FULL          | ETABLISSEMENT    |      1 |    755 |     90 |00:00:00.01 |       3 |      0 |       |       |          |                                                                                                                                                         
    |*  9 |        TABLE ACCESS BY INDEX ROWID| ACHAT            |      1 |    918 |    918 |00:00:00.02 |     401 |      0 |       |       |          |                                                                                                                                                         
    |* 10 |         INDEX RANGE SCAN          | INDEXCODE_ETABLA |      1 |   4100 |   4100 |00:00:00.01 |      11 |      0 |       |       |          |                                                                                                                                                         
    |  11 |      VIEW                         |                  |    765 |      6 |    567 |00:12:28.56 |    5487K|   5057K|       |       |          |                                                                                                                                                         
    |* 12 |       HASH JOIN ANTI NA           |                  |    765 |      6 |    567 |00:12:28.56 |    5487K|   5057K|   719K|   719K|  339K (0)|                                                                                                                                                         
    |* 13 |        TABLE ACCESS BY INDEX ROWID| ACHAT            |    765 |    609 |    609 |00:00:02.87 |     424K|      0 |       |       |          |                                                                                                                                                         
    |* 14 |         INDEX RANGE SCAN          | INDEXTIERSA      |    765 |    335 |   1047K|00:00:00.58 |    3070 |      0 |       |       |          |                                                                                                                                                         
    |* 15 |        TABLE ACCESS FULL          | ACHAT            |    588 |   6706K|   6706K|00:03:03.67 |    5063K|   5057K|       |       |          |                                                                                                                                                         
    ----------------------------------------------------------------------------------------------------------------------------------------------------                                                                                                                                                         
     
    Predicate Information (identified by operation id):                                                                                                                                                                                                                                                          
    ---------------------------------------------------                                                                                                                                                                                                                                                          
     
       3 - filter("P"."NUM_PIECE" IS NULL)                                                                                                                                                                                                                                                                       
       5 - access("T"."NUM_PIECE_INTERNE"="NUM_PIECE_INTERNE")                                                                                                                                                                                                                                                   
       6 - filter("DESIGNATION" LIKE 'ANNULATION d''un BON d'' EXPEDITION de TRANSFERT%')                                                                                                                                                                                                                        
       7 - access("T"."TIERS"="E"."CODE_ETABL")                                                                                                                                                                                                                                                                  
       9 - filter(("T"."DESIGNATION" LIKE 'BON d'' EXPEDITION de TRANSFERT%' AND "T"."DATE_ACHAT">=TO_DATE(' 2013-01-01 00:00:00', 'syyyy-mm-dd                                                                                                                                                                  
                  hh24:mi:ss') AND "T"."DATE_ACHAT"<=TO_DATE(' 2013-11-18 00:00:00', 'syyyy-mm-dd hh24:mi:ss')))                                                                                                                                                                                                 
      10 - access("T"."CODE_ETABL"='432')                                                                                                                                                                                                                                                                        
      12 - access("P"."NUM_PIECE_INTERNE"="NUM_PIECE_INTERNE")                                                                                                                                                                                                                                                   
      13 - filter(("P"."CODE_ETABL"="T"."TIERS" AND "P"."DESIGNATION" LIKE 'BON de RECEPTION de TRANSFERT%' AND                                                                                                                                                                                                  
                  TRANSLATE("T"."NUM_PIECE_INTERNE",'0123456789'||"T"."NUM_PIECE_INTERNE",'0123456789')=TRANSLATE("P"."NUM_PIECE_INTERNE",'0123456789'||"P"."N                                                                                                                                                   
                  UM_PIECE_INTERNE",'0123456789')))                                                                                                                                                                                                                                                              
      14 - access("P"."TIERS"="T"."CODE_ETABL")                                                                                                                                                                                                                                                                  
      15 - filter("DESIGNATION" LIKE 'ANNULATION d''un BON de RECEPTION de TRANSFERT%')                                                                                                                                                                                                                          
     
    Note                                                                                                                                                                                                                                                                                                         
    -----                                                                                                                                                                                                                                                                                                        
       - cardinality feedback used for this statement                                                                                                                                                                                                                                                            
     
     
    63 rows selected
    Et pour la seconde:
    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
    PLAN_TABLE_OUTPUT                                                                                                                                                                                                                                                                                            
    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
    SQL_ID  1ck6ba2y1cd6p, child number 0                                                                                                                                                                                                                                                                        
    -------------------------------------                                                                                                                                                                                                                                                                        
    WITH AZ AS(SELECT DISTINCT t.NUM_PIECE_INTERNE "PIECE                                                                                                                                                                                                                                                        
    INTERNE",t.NUM_PIECE AS NUM_PIECE_E,p.NUM_PIECE AS NUM_PIECE_R FROM                                                                                                                                                                                                                                          
    achat t INNER JOIN achat p ON TRANSLATE(t.NUM_PIECE_INTERNE ,                                                                                                                                                                                                                                                
    '0123456789' || t.NUM_PIECE_INTERNE,                                                                                                                                                                                                                                                                         
    '0123456789')=TRANSLATE(p.NUM_PIECE_INTERNE , '0123456789' ||                                                                                                                                                                                                                                                
    p.NUM_PIECE_INTERNE, '0123456789') AND p.designation LIKE 'BON de                                                                                                                                                                                                                                            
    RECEPTION de TRANSFERT%' AND p.NUM_PIECE_INTERNE NOT IN (SELECT                                                                                                                                                                                                                                              
    num_piece_interne FROM achat WHERE designation LIKE 'ANNULATION d''un                                                                                                                                                                                                                                        
    BON de RECEPTION de TRANSFERT%') AND  p.tiers= t.code_etabl AND                                                                                                                                                                                                                                              
    p.CODE_ETABL=t.tiers   WHERE t.CODE_ETABL ='432' AND t.designation LIKE                                                                                                                                                                                                                                      
    'BON d'' EXPEDITION de TRANSFERT%' AND t.NUM_PIECE_INTERNE NOT IN                                                                                                                                                                                                                                            
    (SELECT num_piece_interne FROM achat WHERE designation LIKE 'ANNULATION                                                                                                                                                                                                                                      
    d''un BON d'' EXPEDITION de TRANSFERT%') AND t.date_achat BETWEEN                                                                                                                                                                                                                                            
    '01/01/2013' AND '18/11/2013' ORDER BY t.NUM_PIECE_INTERNE ASC) SELECT                                                                                                                                                                                                                                       
    /*+ GATHER_PLAN_STATISTICS */DISTINCT t.NUM_PIECE_INTERNE "PIECE                                                                                                                                                                                                                                             
    INTERNE",t.NUM_PIECE AS NUM_PIECE_E,TO_CH                                                                                                                                                                                                                                                                    
     
    Plan hash value: 716002260                                                                                                                                                                                                                                                                                   
     
    ----------------------------------------------------------------------------------------------------------------------------------------------------------                                                                                                                                                   
    | Id  | Operation                               | Name             | Starts | E-Rows | A-Rows |   A-Time   | Buffers | Reads  |  OMem |  1Mem | Used-Mem |                                                                                                                                                   
    ----------------------------------------------------------------------------------------------------------------------------------------------------------                                                                                                                                                   
    |   0 | SELECT STATEMENT                        |                  |      1 |        |    200 |00:00:38.20 |     514K|    223K|       |       |          |                                                                                                                                                   
    |   1 |  SORT ORDER BY                          |                  |      1 |      1 |    200 |00:00:38.20 |     514K|    223K| 33792 | 33792 |30720  (0)|                                                                                                                                                   
    |   2 |   HASH UNIQUE                           |                  |      1 |      1 |    200 |00:00:38.20 |     514K|    223K|   721K|   721K| 1275K (0)|                                                                                                                                                   
    |   3 |    NESTED LOOPS OUTER                   |                  |      1 |      1 |    200 |00:02:50.81 |     514K|    223K|       |       |          |                                                                                                                                                   
    |   4 |     NESTED LOOPS OUTER                  |                  |      1 |      1 |    200 |00:00:05.32 |     207K|  25803 |       |       |          |                                                                                                                                                   
    |*  5 |      HASH JOIN ANTI NA                  |                  |      1 |      1 |    200 |00:00:05.32 |     207K|  25803 |   752K|   752K| 1232K (0)|                                                                                                                                                   
    |*  6 |       HASH JOIN ANTI NA                 |                  |      1 |      2 |    765 |00:00:01.54 |    9012 |   8601 |   752K|   752K| 1214K (0)|                                                                                                                                                   
    |*  7 |        TABLE ACCESS BY INDEX ROWID      | ACHAT            |      1 |    234 |    918 |00:00:00.01 |     401 |      0 |       |       |          |                                                                                                                                                   
    |*  8 |         INDEX RANGE SCAN                | INDEXCODE_ETABLA |      1 |   4925 |   4100 |00:00:00.01 |      11 |      0 |       |       |          |                                                                                                                                                   
    |*  9 |        TABLE ACCESS FULL                | ACHAT            |      1 |   8016 |   2274 |00:00:00.34 |    8611 |   8601 |       |       |          |                                                                                                                                                   
    |  10 |       VIEW                              |                  |      1 |      1 |    567 |00:00:03.78 |     198K|  17202 |       |       |          |                                                                                                                                                   
    |  11 |        SORT ORDER BY                    |                  |      1 |      1 |    567 |00:00:03.78 |     198K|  17202 | 43008 | 43008 |38912  (0)|                                                                                                                                                   
    |  12 |         HASH UNIQUE                     |                  |      1 |      1 |    567 |00:00:03.77 |     198K|  17202 |   776K|   776K| 1223K (0)|                                                                                                                                                   
    |* 13 |          HASH JOIN ANTI NA              |                  |      1 |      1 |    567 |00:00:03.77 |     198K|  17202 |   780K|   780K| 1231K (0)|                                                                                                                                                   
    |  14 |           NESTED LOOPS                  |                  |      1 |        |    652 |00:00:02.48 |     189K|   8601 |       |       |          |                                                                                                                                                   
    |  15 |            NESTED LOOPS                 |                  |      1 |      1 |    400K|00:00:01.40 |   11455 |   8601 |       |       |          |                                                                                                                                                   
    |* 16 |             HASH JOIN ANTI NA           |                  |      1 |      1 |    729 |00:00:01.14 |    9168 |   8601 |   797K|   797K| 1216K (0)|                                                                                                                                                   
    |* 17 |              TABLE ACCESS BY INDEX ROWID| ACHAT            |      1 |     94 |    804 |00:00:00.01 |     557 |      0 |       |       |          |                                                                                                                                                   
    |* 18 |               INDEX RANGE SCAN          | INDEXTIERSA      |      1 |   1983 |   1369 |00:00:00.01 |       6 |      0 |       |       |          |                                                                                                                                                   
    |* 19 |              TABLE ACCESS FULL          | ACHAT            |      1 |   8016 |  11405 |00:00:00.06 |    8611 |   8601 |       |       |          |                                                                                                                                                   
    |* 20 |             INDEX RANGE SCAN            | INDEXTIERSA      |    729 |    518 |    400K|00:00:00.15 |    2287 |      0 |       |       |          |                                                                                                                                                   
    |* 21 |            TABLE ACCESS BY INDEX ROWID  | ACHAT            |    400K|      1 |    652 |00:00:01.20 |     177K|      0 |       |       |          |                                                                                                                                                   
    |* 22 |           TABLE ACCESS FULL             | ACHAT            |      1 |   8016 |   2274 |00:00:00.35 |    8611 |   8601 |       |       |          |                                                                                                                                                   
    |  23 |      TABLE ACCESS BY INDEX ROWID        | ETABLISSEMENT    |    200 |      1 |    190 |00:00:00.01 |     194 |      0 |       |       |          |                                                                                                                                                   
    |* 24 |       INDEX UNIQUE SCAN                 | ETABL_CODE_ETABL |    200 |      1 |    190 |00:00:00.01 |       4 |      0 |       |       |          |                                                                                                                                                   
    |  25 |     VIEW                                |                  |    200 |      1 |      0 |00:00:32.88 |     307K|    197K|       |       |          |                                                                                                                                                   
    |* 26 |      HASH JOIN ANTI NA                  |                  |    200 |      1 |      0 |00:00:32.88 |     307K|    197K|   719K|   719K|  369K (0)|                                                                                                                                                   
    |* 27 |       TABLE ACCESS BY INDEX ROWID       | ACHAT            |    200 |      1 |     38 |00:00:03.85 |     109K|      0 |       |       |          |                                                                                                                                                   
    |* 28 |        INDEX RANGE SCAN                 | INDEXCODE_ETABLA |    200 |    335 |   6424K|00:00:02.22 |   21556 |      0 |       |       |          |                                                                                                                                                   
    |* 29 |       TABLE ACCESS FULL                 | ACHAT            |     23 |   8016 |    262K|00:00:07.17 |     198K|    197K|       |       |          |                                                                                                                                                   
    ----------------------------------------------------------------------------------------------------------------------------------------------------------                                                                                                                                                   
     
    Predicate Information (identified by operation id):                                                                                                                                                                                                                                                          
    ---------------------------------------------------                                                                                                                                                                                                                                                          
     
       5 - access("T"."NUM_PIECE"="NUM_PIECE_E")                                                                                                                                                                                                                                                                 
       6 - access("T"."NUM_PIECE_INTERNE"="NUM_PIECE_INTERNE")                                                                                                                                                                                                                                                   
       7 - filter(("T"."DESIGNATION" LIKE 'BON d'' EXPEDITION de TRANSFERT%' AND "T"."DATE_ACHAT">=TO_DATE(' 2013-01-01 00:00:00', 'syyyy-mm-dd                                                                                                                                                                  
                  hh24:mi:ss') AND "T"."DATE_ACHAT"<=TO_DATE(' 2013-11-18 00:00:00', 'syyyy-mm-dd hh24:mi:ss')))                                                                                                                                                                                                 
       8 - access("T"."CODE_ETABL"='432')                                                                                                                                                                                                                                                                        
       9 - filter("DESIGNATION" LIKE 'ANNULATION d''un BON d'' EXPEDITION de TRANSFERT%')                                                                                                                                                                                                                        
      13 - access("T"."NUM_PIECE_INTERNE"="NUM_PIECE_INTERNE")                                                                                                                                                                                                                                                   
      16 - access("P"."NUM_PIECE_INTERNE"="NUM_PIECE_INTERNE")                                                                                                                                                                                                                                                   
      17 - filter("P"."DESIGNATION" LIKE 'BON de RECEPTION de TRANSFERT%')                                                                                                                                                                                                                                       
      18 - access("P"."TIERS"='432')                                                                                                                                                                                                                                                                             
      19 - filter("DESIGNATION" LIKE 'ANNULATION d''un BON de RECEPTION de TRANSFERT%')                                                                                                                                                                                                                          
      20 - access("P"."CODE_ETABL"="T"."TIERS")                                                                                                                                                                                                                                                                  
      21 - filter(("T"."CODE_ETABL"='432' AND "T"."DESIGNATION" LIKE 'BON d'' EXPEDITION de TRANSFERT%' AND "T"."DATE_ACHAT">=TO_DATE(' 2013-01-01                                                                                                                                                               
                  00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND "T"."DATE_ACHAT"<=TO_DATE(' 2013-11-18 00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND                                                                                                                                                                       
                  TRANSLATE("T"."NUM_PIECE_INTERNE",'0123456789'||"T"."NUM_PIECE_INTERNE",'0123456789')=TRANSLATE("P"."NUM_PIECE_INTERNE",'0123456789'||"P"."NUM_PIE                                                                                                                                             
                  CE_INTERNE",'0123456789')))                                                                                                                                                                                                                                                                    
      22 - filter("DESIGNATION" LIKE 'ANNULATION d''un BON d'' EXPEDITION de TRANSFERT%')                                                                                                                                                                                                                        
      24 - access("T"."TIERS"="E"."CODE_ETABL")                                                                                                                                                                                                                                                                  
      26 - access("P"."NUM_PIECE_INTERNE"="NUM_PIECE_INTERNE")                                                                                                                                                                                                                                                   
      27 - filter(("P"."TIERS"="T"."CODE_ETABL" AND "P"."DESIGNATION" LIKE 'BON de RECEPTION de TRANSFERT%' AND                                                                                                                                                                                                  
                  TRANSLATE("T"."NUM_PIECE_INTERNE",'0123456789'||"T"."NUM_PIECE_INTERNE",'0123456789')=TRANSLATE("P"."NUM_PIECE_INTERNE",'0123456789'||"P"."NUM_PIE                                                                                                                                             
                  CE_INTERNE",'0123456789')))                                                                                                                                                                                                                                                                    
      28 - access("P"."CODE_ETABL"="T"."TIERS")                                                                                                                                                                                                                                                                  
      29 - filter("DESIGNATION" LIKE 'ANNULATION d''un BON de RECEPTION de TRANSFERT%')                                                                                                                                                                                                                          
     
     
    84 rows selected
    Citation Envoyé par skuatamad Voir le message
    Concernant la requête vous semblez avoir un gros problème de modélisation, la jointure avec translate est tout de même très étrange...
    L'objectif des translate est de pouvoir comparer les nombres contenus dans num_piece_interne car les num_piece_interne sont saisies manuellement entre deux etablissement par conséquent elles sont souvent mal saisi avec des espaces ou oubli de certains caractères
    Citation Envoyé par skuatamad Voir le message
    Avez vous la possibilité de créer des indexs ?
    Si possible je tenterais un index sur (designation, num_piece_interne) compressé si possible.
    Et un sur (CODE_ETABL, TIERS, TRANSLATE(NUM_PIECE_INTERNE,'0123456789'||NUM_PIECE_INTERNE,'0123456789'), DESIGNATION) sans conviction sur l'ordre des colonnes dans l'index (menez des tests si nécessaire) à voir même si la colonne DESIGNATION a sa place dans l'index (elle semble quand même bien filtrante au moins pour ANNULATION d''un BON d' EXPEDITION de TRANSFERT%)
    Oui j'ai la possibilité de créer des index il y'a des index sur code_etabl et tiers et num_piece_interne séparément et un autre composé de (CODE_ETABL, date_achat)
    Citation Envoyé par skuatamad Voir le message
    PS : cette jointure est bien volontaire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AND p.tiers= t.code_etabl 
       AND p.CODE_ETABL=t.tiers
    Par ailleurs vous devriez utiliser to_date explicitement sur votre BETWEEN.
    Oui cette jointure est bien volontaire son objectif est de pouvoir trouver pour une num_piece_interne le tiers correspondant dans l’établissement de destination car un etablissement(tiers) emet un bon vers un autre.

  12. #12
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Ça a l'air un peu mieux niveau estimation.
    La distribution de DESIGNATION semble être assez peu uniforme, si vous le confirmez, vous devriez envisager un histogramme sur cette colonne.
    Si vous êtes en 11g regardez peut être aussi du côté des statistiques multi-colonnes pour le couple (tiers,code_etabl)

    Je ne trouve pas vos index suffisamment filtrant, mais en tous cas un index sur (designation, num_piece_interne) pour faire du FAST FULL SCAN dans vos NOT IN me semble vraiment intéressant (compressé si possible pour limiter encore plus les IO).

    Au sujet de la compression des index :
    http://asktom.oracle.com/pls/asktom/...41052745029077

  13. #13
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 98
    Points : 45
    Points
    45
    Par défaut
    je comprend pas ce que vous voulez dire par là?
    Citation Envoyé par skuatamad Voir le message
    Ça a l'air un peu mieux niveau estimation.
    La distribution de DESIGNATION semble être assez peu uniforme, si vous le confirmez, vous devriez envisager un histogramme sur cette colonne.
    Citation Envoyé par skuatamad Voir le message
    Si vous êtes en 11g regardez peut être aussi du côté des statistiques multi-colonnes pour le couple (tiers,code_etabl)

    Je ne trouve pas vos index suffisamment filtrant, mais en tous cas un index sur (designation, num_piece_interne) pour faire du FAST FULL SCAN dans vos NOT IN me semble vraiment intéressant (compressé si possible pour limiter encore plus les IO).

    Au sujet de la compression des index :
    http://asktom.oracle.com/pls/asktom/...41052745029077
    Je suis le 11g et effectivement je compte revoir mes indexes

  14. #14
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Citation Envoyé par sabdoul Voir le message
    je comprend pas ce que vous voulez dire par là?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select designation, count(*)
      from achat
     group by designation
    Si le count(*) est très important pour certaines valeurs de désignation et faible pour d'autres c'est que la distribution n'est pas uniforme or sans histogrammes l'optimiseur considère que les données sont équitablement répartie

    Pour l'histogramme multi-colonne sur (tiers,code_etabl) c'est juste une piste de réflexion.

  15. #15
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 98
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    pour le couple (tiers,code_etabl)

    Je ne trouve pas vos index suffisamment filtrant, mais en tous cas un index sur (designation, num_piece_interne) pour faire du FAST FULL SCAN dans vos NOT IN me semble vraiment intéressant (compressé si possible pour limiter encore plus les IO).

    Au sujet de la compression des index :
    effectivement après avoir ajouté ces indexes (designation, num_piece_interne) et (tiers,code_etabl) la performance a considérablement évoluée:
    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
     
    PLAN_TABLE_OUTPUT                                                                                                                                                                                                                                                                                            
    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
    SQL_ID  1spjpwqkhvtkb, child number 3                                                                                                                                                                                                                                                                        
    -------------------------------------                                                                                                                                                                                                                                                                        
    SELECT /*+ GATHER_PLAN_STATISTICS */DISTINCT t.NUM_PIECE_INTERNE "PIECE                                                                                                                                                                                                                                      
    INTERNE",t.NUM_PIECE AS NUM_PIECE_E,TO_CHAR(t.date_achat                                                                                                                                                                                                                                                     
    ,'DD/MM/YYYY')"DATE ENVOI",t.VALEUR "VALEUR ENVOI",t.tiers ||' : ' ||                                                                                                                                                                                                                                        
    e.description AS Receveur,p.NUM_PIECE AS                                                                                                                                                                                                                                                                     
    NUM_PIECE_R,TO_CHAR(p.date_achat ,'DD/MM/YYYY') "DATE                                                                                                                                                                                                                                                        
    RECEPTION",p.VALEUR "VALEUR RECEPTION",t.VALEUR+p.VALEUR AS Ecart  FROM                                                                                                                                                                                                                                      
    achat t LEFT JOIN etablissement e ON t.tiers= e.code_etabl LEFT JOIN                                                                                                                                                                                                                                         
    achat p ON TRANSLATE(t.NUM_PIECE_INTERNE , '0123456789' ||                                                                                                                                                                                                                                                   
    t.NUM_PIECE_INTERNE, '0123456789')=TRANSLATE(p.NUM_PIECE_INTERNE ,                                                                                                                                                                                                                                           
    '0123456789' || p.NUM_PIECE_INTERNE, '0123456789') AND p.designation                                                                                                                                                                                                                                         
    LIKE 'BON de RECEPTION de TRANSFERT%' AND p.NUM_PIECE_INTERNE NOT IN                                                                                                                                                                                                                                         
    (SELECT num_piece_interne FROM achat WHERE designation LIKE 'ANNULATION                                                                                                                                                                                                                                      
    d''un BON de RECEPTION de TRANSFERT%') AND  p.tiers= t.code_etabl AND                                                                                                                                                                                                                                        
    p.CODE_ETABL=t.tiers  WHERE t.CODE_ETABL ='432' AND t.designation LIKE                                                                                                                                                                                                                                       
    'BON d'' EXPEDITION de TRANSFERT%' AND t.NUM_PIECE_INTERNE NOT IN                                                                                                                                                                                                                                            
    (SELECT num_piece_inte                                                                                                                                                                                                                                                                                       
     
    Plan hash value: 3011827537                                                                                                                                                                                                                                                                                  
     
    --------------------------------------------------------------------------------------------------------------------------------------------------                                                                                                                                                           
    | Id  | Operation                              | Name               | Starts | E-Rows | A-Rows |   A-Time   | Buffers |  OMem |  1Mem | Used-Mem |                                                                                                                                                           
    --------------------------------------------------------------------------------------------------------------------------------------------------                                                                                                                                                           
    |   0 | SELECT STATEMENT                       |                    |      1 |        |    200 |00:00:26.92 |    1454K|       |       |          |                                                                                                                                                           
    |   1 |  SORT ORDER BY                         |                    |      1 |      1 |    200 |00:00:26.92 |    1454K| 33792 | 33792 |30720  (0)|                                                                                                                                                           
    |   2 |   HASH UNIQUE                          |                    |      1 |      1 |    200 |00:00:26.92 |    1454K|   721K|   721K| 1253K (0)|                                                                                                                                                           
    |*  3 |    FILTER                              |                    |      1 |        |    200 |00:00:32.26 |    1454K|       |       |          |                                                                                                                                                           
    |   4 |     NESTED LOOPS OUTER                 |                    |      1 |      1 |    767 |00:00:24.47 |    1454K|       |       |          |                                                                                                                                                           
    |*  5 |      HASH JOIN ANTI NA                 |                    |      1 |     23 |    765 |00:00:00.05 |     466 |   731K|   731K| 1253K (0)|                                                                                                                                                           
    |*  6 |       HASH JOIN RIGHT OUTER            |                    |      1 |   2259 |    918 |00:00:00.04 |     440 |   821K|   821K| 1232K (0)|                                                                                                                                                           
    |   7 |        TABLE ACCESS FULL               | ETABLISSEMENT      |      1 |    755 |     90 |00:00:00.01 |       3 |       |       |          |                                                                                                                                                           
    |   8 |        TABLE ACCESS BY INDEX ROWID     | ACHAT              |      1 |    918 |    918 |00:00:00.04 |     437 |       |       |          |                                                                                                                                                           
    |   9 |         BITMAP CONVERSION TO ROWIDS    |                    |      1 |        |    918 |00:00:00.04 |     194 |       |       |          |                                                                                                                                                           
    |  10 |          BITMAP AND                    |                    |      1 |        |      1 |00:00:00.04 |     194 |       |       |          |                                                                                                                                                           
    |  11 |           BITMAP CONVERSION FROM ROWIDS|                    |      1 |        |      1 |00:00:00.01 |      16 |       |       |          |                                                                                                                                                           
    |  12 |            SORT ORDER BY               |                    |      1 |        |   4100 |00:00:00.01 |      16 |   133K|   133K|  118K (0)|                                                                                                                                                           
    |* 13 |             INDEX RANGE SCAN           | INDEXDATEGENVCODEA |      1 |   4925 |   4100 |00:00:00.01 |      16 |       |       |          |                                                                                                                                                           
    |  14 |           BITMAP CONVERSION FROM ROWIDS|                    |      1 |        |      2 |00:00:00.03 |     178 |       |       |          |                                                                                                                                                           
    |  15 |            SORT ORDER BY               |                    |      1 |        |  22111 |00:00:00.04 |     178 |   619K|   472K|  550K (0)|                                                                                                                                                           
    |* 16 |             INDEX RANGE SCAN           | INDEX2             |      1 |   4925 |  22111 |00:00:00.02 |     178 |       |       |          |                                                                                                                                                           
    |* 17 |       INDEX RANGE SCAN                 | INDEX2             |      1 |   8016 |   2274 |00:00:00.01 |      26 |       |       |          |                                                                                                                                                           
    |  18 |      VIEW                              |                    |    765 |      6 |    567 |00:00:26.85 |    1454K|       |       |          |                                                                                                                                                           
    |* 19 |       HASH JOIN ANTI NA                |                    |    765 |      6 |    567 |00:00:26.85 |    1454K|   769K|   769K|  400K (0)|                                                                                                                                                           
    |* 20 |        TABLE ACCESS BY INDEX ROWID     | ACHAT              |    765 |    609 |    609 |00:00:01.97 |     424K|       |       |          |                                                                                                                                                           
    |* 21 |         INDEX RANGE SCAN               | INDEXTIERSA        |    765 |    335 |   1047K|00:00:00.39 |    3070 |       |       |          |                                                                                                                                                           
    |* 22 |        INDEX FAST FULL SCAN            | INDEX2             |    588 |   8016 |   6706K|00:00:04.93 |    1029K|       |       |          |                                                                                                                                                           
    --------------------------------------------------------------------------------------------------------------------------------------------------                                                                                                                                                           
     
    Predicate Information (identified by operation id):                                                                                                                                                                                                                                                          
    ---------------------------------------------------                                                                                                                                                                                                                                                          
     
       3 - filter("P"."NUM_PIECE" IS NULL)                                                                                                                                                                                                                                                                       
       5 - access("T"."NUM_PIECE_INTERNE"="NUM_PIECE_INTERNE")                                                                                                                                                                                                                                                   
       6 - access("T"."TIERS"="E"."CODE_ETABL")                                                                                                                                                                                                                                                                  
      13 - access("T"."CODE_ETABL"='432' AND "T"."DATE_ACHAT">=TO_DATE(' 2013-01-01 00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND                                                                                                                                                                                     
                  "T"."DATE_ACHAT"<=TO_DATE(' 2013-11-18 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))                                                                                                                                                                                                                   
           filter(("T"."DATE_ACHAT"<=TO_DATE(' 2013-11-18 00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND "T"."DATE_ACHAT">=TO_DATE(' 2013-01-01                                                                                                                                                                        
                  00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND "T"."CODE_ETABL"='432'))                                                                                                                                                                                                                              
      16 - access("T"."DESIGNATION" LIKE 'BON d'' EXPEDITION de TRANSFERT%')                                                                                                                                                                                                                                     
           filter(("T"."DESIGNATION" LIKE 'BON d'' EXPEDITION de TRANSFERT%' AND "T"."DESIGNATION" LIKE 'BON d'' EXPEDITION de TRANSFERT%'))                                                                                                                                                                     
      17 - access("DESIGNATION" LIKE 'ANNULATION d''un BON d'' EXPEDITION de TRANSFERT%')                                                                                                                                                                                                                        
           filter("DESIGNATION" LIKE 'ANNULATION d''un BON d'' EXPEDITION de TRANSFERT%')                                                                                                                                                                                                                        
      19 - access("P"."NUM_PIECE_INTERNE"="NUM_PIECE_INTERNE")                                                                                                                                                                                                                                                   
      20 - filter(("P"."CODE_ETABL"="T"."TIERS" AND "P"."DESIGNATION" LIKE 'BON de RECEPTION de TRANSFERT%' AND                                                                                                                                                                                                  
                  TRANSLATE("T"."NUM_PIECE_INTERNE",'0123456789'||"T"."NUM_PIECE_INTERNE",'0123456789')=TRANSLATE("P"."NUM_PIECE_INTERNE",'0123456789'||"P".                                                                                                                                                     
                  "NUM_PIECE_INTERNE",'0123456789')))                                                                                                                                                                                                                                                            
      21 - access("P"."TIERS"="T"."CODE_ETABL")                                                                                                                                                                                                                                                                  
      22 - filter("DESIGNATION" LIKE 'ANNULATION d''un BON de RECEPTION de TRANSFERT%')                                                                                                                                                                                                                          
     
    Note                                                                                                                                                                                                                                                                                                         
    -----                                                                                                                                                                                                                                                                                                        
       - cardinality feedback used for this statement                                                                                                                                                                                                                                                            
     
     
    74 rows selected

  16. #16
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 98
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select designation, count(*)
      from achat
     group by designation
    Si le count(*) est très important pour certaines valeurs de désignation et faible pour d'autres c'est que la distribution n'est pas uniforme or sans histogrammes l'optimiseur considère que les données sont équitablement répartie

    Pour l'histogramme multi-colonne sur (tiers,code_etabl) c'est juste une piste de réflexion.
    Effectivement c'est le cas:
    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
    SELECT designation, count(*)
      FROM achat
     GROUP BY designation
     
    resultat:
    DESIGNATION                                                                                                                      COUNT(*)               
    -------------------------------------------------------------------------------------------------------------------------------- ---------------------- 
    BON de DOCUMENT INVENTAIRE                                                                                                       30                     
                                                                                                                                     1048571                
    ANNULATION d'un BON de RECEPTION de TRANSFERT                                                                                    11405                  
    BON DE SAISIE D'INVENTAIRE                                                                                                       3                      
    25764019                                                                                                                         1                      
    BON d' EXPEDITION de TRANSFERT                                                                                                   22111                  
    Retour d'entrée en stock                                                                                                         10641                  
    BON de CORRECTIONS Inventaire                                                                                                    6                      
    Bon d'entrée en stock d'un fournisseur                                                                                           28958                  
    BON de CORRECTIONS INVENTAIRE                                                                                                    98                     
    BON DE SAISIE D'INVENTAIRE                                                                                                       3                      
    BON de SAISIE INVENTAIRE                                                                                                         100                    
    BON de CORRECTIONS Inventaire                                                                                                    24                     
    BON de SAISIE D'UN INVENTAIRE                                                                                                    3                      
    BON de CORRECTIONS IC45                                                                                                          3984                   
    BON de CORRECTIONSINVENTAIRE                                                                                                     3                      
    25761006                                                                                                                         2                      
    ANNULATION d'un BON d' EXPEDITION de TRANSFERT                                                                                   2274                   
    BON de CORRECTIONS INVENTAIRE                                                                                                    8                      
    BON de CORRECTIONS de Inventaire                                                                                                 3                      
    26532001                                                                                                                         3                      
    BON de RECEPTION de TRANSFERT                                                                                                    90152                  
     
    22 rows selected
     
    DESIGNATION                                                                                                                      COUNT(*)               
    -------------------------------------------------------------------------------------------------------------------------------- ---------------------- 
    BON de DOCUMENT INVENTAIRE                                                                                                       30                     
                                                                                                                                     1048571                
    ANNULATION d'un BON de RECEPTION de TRANSFERT                                                                                    11405                  
    BON DE SAISIE D'INVENTAIRE                                                                                                       3                      
    25764019                                                                                                                         1                      
    BON d' EXPEDITION de TRANSFERT                                                                                                   22111                  
    Retour d'entrée en stock                                                                                                         10641                  
    BON de CORRECTIONS Inventaire                                                                                                    6                      
    Bon d'entrée en stock d'un fournisseur                                                                                           28958                  
    BON de CORRECTIONS INVENTAIRE                                                                                                    98                     
    BON DE SAISIE D'INVENTAIRE                                                                                                       3                      
    BON de SAISIE INVENTAIRE                                                                                                         100                    
    BON de CORRECTIONS Inventaire                                                                                                    24                     
    BON de SAISIE D'UN INVENTAIRE                                                                                                    3                      
    BON de CORRECTIONS IC45                                                                                                          3984                   
    BON de CORRECTIONSINVENTAIRE                                                                                                     3                      
    25761006                                                                                                                         2                      
    ANNULATION d'un BON d' EXPEDITION de TRANSFERT                                                                                   2274                   
    BON de CORRECTIONS INVENTAIRE                                                                                                    8                      
    BON de CORRECTIONS de Inventaire                                                                                                 3                      
    26532001                                                                                                                         3                      
    BON de RECEPTION de TRANSFERT                                                                                                    90152                  
     
    22 rows selected

  17. #17
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 98
    Points : 45
    Points
    45
    Par défaut
    Je pense que le problème peut être considéré comme resolus car en plus de tenir compte des remarques de jkofr :
    Citation Envoyé par jkofr Voir le message
    Hello,

    Un dėtail, je vois pas l'utilité des 2 sub query dans ton cas

    Jko
    J'ai enlever ce sub query:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p.designation LIKE 'BON de RECEPTION de TRANSFERT%' AND p.NUM_PIECE_INTERNE NOT IN (SELECT num_piece_interne FROM achat WHERE designation LIKE 'ANNULATION d''un BON de RECEPTION de TRANSFERT%')
    car l'objectif étant de retrouver les bons qui n'ont pas été saisis c'est un détail qui m'avais échappé, ainsi sans cette sub query la requête exécutait plus vite et en plus des indexes préconisés par skuatamad elle est devenue plus rapide encore a s’exécuter. Merci a tous de m'avoir aidé une fois encore. cependant sil y'a des remarques encore a faire sur la requête elle serait la bienvenue.

  18. #18
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Citation Envoyé par sabdoul Voir le message
    Effectivement c'est le cas:
    Donc calculez un histogramme pour la colonne designation, en plus vous avez peu de valeurs distinctes :
    How does the METHOD_OPT parameter work?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    method_opt => for COLUMNS size 254 DESIGNATION

  19. #19
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 98
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Donc calculez un histogramme pour la colonne designation, en plus vous avez peu de valeurs distinctes :
    How does the METHOD_OPT parameter work?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    method_opt => for COLUMNS size 254 DESIGNATION
    Voici l'histogramme a vrai di je n'y comprend pas grande chose. puis- je avoir des explications
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    COLUMN_NAME                    NUM_DISTINCT           HISTOGRAM       
    ------------------------------ ---------------------- --------------- 
    TIERS                          325                    HEIGHT BALANCED 
    NUM_PIECE                      24770                  NONE            
    NUM_PIECE_INTERNE              119440                 NONE            
    VALEUR                         124280                 NONE            
    DATE_GENERATION                226                    FREQUENCY       
    CODE_FOURNISSEUR               60                     FREQUENCY       
    CODE_ETABL                     88                     FREQUENCY       
    DATE_ACHAT                     375                    HEIGHT BALANCED 
    DESIGNATION                    21                     FREQUENCY       
     
    9 rows selected

  20. #20
    Membre éclairé Avatar de jkofr
    Homme Profil pro
    Senior Consultant DBA (Trivadis SA)
    Inscrit en
    Octobre 2006
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Senior Consultant DBA (Trivadis SA)
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 484
    Points : 724
    Points
    724
    Par défaut
    Que donne le plan d'exec maintenant?
    Jko
    OCM 11g, RAC and Performance & Tuning Expert 11g
    RMAN Backup & Recovery, Data Guard and Grid Control

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Jointure externe sur sous rapport
    Par ALLODREN dans le forum iReport
    Réponses: 2
    Dernier message: 03/02/2014, 23h54
  2. Réponses: 2
    Dernier message: 03/08/2011, 17h58
  3. Temps d'exécution requête Access très long
    Par roman33 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 16/06/2009, 11h01
  4. Réponses: 8
    Dernier message: 28/10/2008, 14h00
  5. Jointures Externes sur sous requête
    Par LeTaz dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/05/2008, 16h58

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