Bonjour,

Voila, lorsque que j'exécute une requête sur une vue que j'ai créée, la requête met plus de 2 minute à s'exécuter.

Il n'y a pas de jointure sur la requête, les jointures sont effectuées dans la vue.

L'exécution est rapide si dans la requête je ne mets que deux clauses where, par contre à partir de quatre clauses where, j'ai un MERGE JOIN CARTESIAN et le nombre de consistant gets augmente radicalement.
Sans compter les Table access full, je sais pas si c'est très optimal.

Plus surprenant lorsque j'effectue un dump de ma base et que je l'envoie à un collègue qui effectue la même requête, sur la base qu'il a créé à partir de mon dump, lui il obtient le résultat en moins de deux secondes, même en mettant les quatre clauses where.

On a effectué un trace (avec set autot trace) sur la même requête chacun de notre côté. Les résultats sont radicalement différents.

On utilise la même version d'Oracle.

Voici ma trace :
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
Plan d exécution
----------------------------------------------------------                      
Plan hash value: 2198388969                                                     
 
------------------------------------------------------------------------------------------------------------------                                              
| Id  | Operation                           | Name                       | Rows  | Bytes | Cost (%CPU)| Time     |                                              
------------------------------------------------------------------------------------------------------------------                                              
|   0 | SELECT STATEMENT                    |                            |     1 |   359 |  3362   (1)| 00:00:41 |                                              
|   1 |  SORT ORDER BY                      |                            |     1 |   359 |  3362   (1)| 00:00:41 |                                              
|   2 |   VIEW                              |                            |     1 |   359 |  3361   (1)| 00:00:41 |                                              
|   3 |    HASH UNIQUE                      |                            |     1 |   278 |  3361   (1)| 00:00:41 |                                              
|   4 |     NESTED LOOPS                    |                            |     1 |   278 |  3360   (1)| 00:00:41 |                                              
|   5 |      MERGE JOIN CARTESIAN           |                            |    59 | 13511 |   103   (2)| 00:00:02 |                                              
|*  6 |       HASH JOIN                     |                            |     1 |   211 |    18  (12)| 00:00:01 |                                              
|   7 |        NESTED LOOPS                 |                            |     1 |   196 |    14   (8)| 00:00:01 |                                              
|   8 |         NESTED LOOPS                |                            |     1 |   163 |    13   (8)| 00:00:01 |                                              
|*  9 |          HASH JOIN                  |                            |     1 |   144 |    12   (9)| 00:00:01 |                                              
|* 10 |           HASH JOIN                 |                            |     7 |   833 |     9  (12)| 00:00:01 |                                              
|* 11 |            TABLE ACCESS FULL        | LEX_COM_ARD                |     1 |    17 |     3   (0)| 00:00:01 |                                              
|* 12 |            TABLE ACCESS FULL        | PRG_OPERATION              |    84 |  8568 |     5   (0)| 00:00:01 |                                              
|* 13 |           TABLE ACCESS FULL         | PRG_LEX_PROGRAMME          |     1 |    25 |     3   (0)| 00:00:01 |                                              
|* 14 |          TABLE ACCESS BY INDEX ROWID| PRG_LEX_ETAT               |     1 |    19 |     1   (0)| 00:00:01 |                                              
|* 15 |           INDEX UNIQUE SCAN         | PRG_LEX_ETAT_IDX           |     1 |       |     0   (0)| 00:00:01 |                                              
|  16 |         TABLE ACCESS BY INDEX ROWID | PRG_LEX_SOUS_PROGRAMME     |     1 |    33 |     1   (0)| 00:00:01 |                                              
|* 17 |          INDEX UNIQUE SCAN          | PRG_LEX_SOUS_PROGRAMME_IDX |     1 |       |     0   (0)| 00:00:01 |                                              
|  18 |        TABLE ACCESS FULL            | LEX_COM_CE                 |    28 |   420 |     3   (0)| 00:00:01 |                                              
|  19 |       BUFFER SORT                   |                            |  2183 | 39294 |   100   (2)| 00:00:02 |                                              
|  20 |        TABLE ACCESS FULL            | SIR_GL_CLASSEMENT_ABCD     |  2183 | 39294 |    85   (0)| 00:00:02 |                                              
|* 21 |      VIEW                           |                            |     1 |    49 |    55   (0)| 00:00:01 |                                              
|* 22 |       TABLE ACCESS FULL             | PRG_TRONCON_OPERATION      |     1 |    49 |    55   (0)| 00:00:01 |                                              
--------------------------------------------------------------------------------                         
 
 
Predicate Information (identified by operation id):                             
---------------------------------------------------                             
 
   6 - access("PRG_OPERATION"."ID_LEX_COM_CE"="LEX_COM_CE"."ID_LEX_COM_CE")     
   9 - access("PRG_OPERATION"."ID_PRG_LEX_PROGRAMME"="PRG_LEX_PROGRAMME"."ID_PRG_LEX_PROGRAMME")                                                                
  10 - access("PRG_OPERATION"."ID_LEX_COM_ARD"="LEX_COM_ARD"."ID_LEX_COM_ARD")  
  11 - filter("LEX_COM_ARD"."NOM_ARD"='Rennes')                                 
  12 - filter("PRG_OPERATION"."ANNEE_OPERATION"=2010 AND "PRG_OPERATION"."ID_PRG_LEX_SOUS_PROGRAMME" IS                                                         
               	NOT NULL AND "PRG_OPERATION"."ID_PRG_LEX_PROGRAMME" IS NOT NULL AND "PRG_OPERATION"."ID_LEX_COM_CE" IS                                            
               	NOT NULL AND "PRG_OPERATION"."ID_LEX_COM_ARD" IS NOT NULL AND "PRG_OPERATION"."ID_PRG_LEX_ETAT" IS NOT NULL)                                                             
  13 - filter("PRG_LEX_PROGRAMME"."LIBELLE"='Grosses réparations')              
  14 - filter("PRG_LEX_ETAT"."LIBELLE"='Voté')                                  
  15 - access("PRG_OPERATION"."ID_PRG_LEX_ETAT"="PRG_LEX_ETAT"."ID_PRG_LEX_ETAT")
  17 - access("PRG_OPERATION"."ID_PRG_LEX_SOUS_PROGRAMME"="PRG_LEX_SOUS_PROGRAMME"."ID_PRG_LEX_SOUS_PROGRAMME")                                                             
  21 - filter("PRG_OPERATION"."CODE_ITIN"="A"."CODE_ITIN")                      
  22 - filter("A"."ROUTE"="B"."ROUTE" AND ("B"."LOCAL1">="A"."LOCAL1" OR "B"."LOCAL2">"A"."LOCAL1") AND 
		("B"."LOCAL1"<"A"."LOCAL2" OR "B"."LOCAL2"<="A"."LOCAL2"))        
 
 
Statistiques
----------------------------------------------------------                      
          0  recursive calls                                                    
          0  db block gets                                                      
    9444161  consistent gets                                                    
          0  physical reads                                                     
          0  redo size                                                          
       5035  bytes sent via SQL*Net to client                                   
        267  bytes received via SQL*Net from client                             
          6  SQL*Net roundtrips to/from client                                  
          2  sorts (memory)                                                     
          0  sorts (disk)                                                       
         61  rows processed
Et voici la sienne :
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
Plan d exécution
----------------------------------------------------------                      
Plan hash value: 3186314313                                                     
 
------------------------------------------------------------------------------------------------------------------                                              
| Id  | Operation                           | Name                       | Rows | Bytes | Cost (%CPU)| Time     |                                              
------------------------------------------------------------------------------------------------------------------                                              
|   0 | SELECT STATEMENT                    |                            |     1 |   359 | 87955   (1)| 00:17:36 |                                            
|   1 |  SORT ORDER BY                      |                            |     1 |   359 | 87955   (1)| 00:17:36 |                                              
|   2 |   VIEW                              |                            |     1 |   359 | 87954   (1)| 00:17:36 |                                              
|   3 |    HASH UNIQUE                      |                            |     1 |   677 | 87954   (1)| 00:17:36 |                                              
|*  4 |     HASH JOIN                       |                            |    27 | 18279 | 87953   (1)| 00:17:36 |                                              
|   5 |      TABLE ACCESS FULL              | LEX_COM_CE                 |    28 |   700 |     3   (0)| 00:00:01 |                                              
|   6 |      NESTED LOOPS                   |                            |    27 | 17604 | 87949   (1)| 00:17:36 |                                              
|   7 |       NESTED LOOPS                  |                            |    27 | 16200 | 87948   (1)| 00:17:36 |                                              
|   8 |        NESTED LOOPS                 |                            |   115 | 63020 | 87947   (1)| 00:17:36 |                                              
|   9 |         NESTED LOOPS                |                            |   692 |   335K| 87946   (1)| 00:17:36 |                                              
|* 10 |          HASH JOIN                  |                            |  2077 |   900K| 87944   (1)| 00:17:36 |                                              
|* 11 |           TABLE ACCESS FULL         | PRG_OPERATION              |   112 | 27664 |     5   (0)| 00:00:01 |                                              
|  12 |           NESTED LOOPS              |                            |  2077 |   399K| 87939   (1)| 00:17:36 |                                              
|  13 |            TABLE ACCESS FULL        | SIR_GL_CLASSEMENT_ABCD     |  2077 | 76849 |    85   (2)| 00:00:02 |                                              
|  14 |            VIEW                     |                            |     1 |   160 |    42   (0)| 00:00:01 |                                              
|* 15 |             TABLE ACCESS FULL       | PRG_TRONCON_OPERATION      |     1 |   160 |    42   (0)| 00:00:01 |                                              
|* 16 |          TABLE ACCESS BY INDEX ROWID| PRG_LEX_PROGRAMME          |     1 |    52 |     1   (0)| 00:00:01 |                                              
|* 17 |           INDEX UNIQUE SCAN         | PRG_LEX_PROGRAMME_IDX      |     1 |       |     0   (0)| 00:00:01 |                                              
|* 18 |         TABLE ACCESS BY INDEX ROWID | LEX_COM_ARD                |     1 |    52 |     1   (0)| 00:00:01 |                                              
|* 19 |          INDEX UNIQUE SCAN          | LEX_COM_ARD_IDX            |     1 |       |     0   (0)| 00:00:01 |                                              
|* 20 |        TABLE ACCESS BY INDEX ROWID  | PRG_LEX_ETAT               |     1 |    52 |     1   (0)| 00:00:01 |                                              
|* 21 |         INDEX UNIQUE SCAN           | PRG_LEX_ETAT_IDX           |     1 |       |     0   (0)| 00:00:01 |                                              
|  22 |       TABLE ACCESS BY INDEX ROWID   | PRG_LEX_SOUS_PROGRAMME     |     1 |    52 |     1   (0)| 00:00:01 |                                              
|* 23 |        INDEX UNIQUE SCAN            | PRG_LEX_SOUS_PROGRAMME_IDX |     1 |       |     0   (0)| 00:00:01 |                                              
------------------------------------------------------------------------------------------------------------------                                              
 
Predicate Information (identified by operation id):                             
---------------------------------------------------                             
 
   4 - access("PRG_OPERATION"."ID_LEX_COM_CE"="LEX_COM_CE"."ID_LEX_COM_CE")     
  10 - access("PRG_OPERATION"."CODE_ITIN"="A"."CODE_ITIN")                      
  11 - filter("PRG_OPERATION"."ANNEE_OPERATION"=2010)                           
  15 - filter("A"."ROUTE"="B"."ROUTE" AND ("B"."LOCAL1">="A"."LOCAL1" OR "B"."LOCAL2">"A"."LOCAL1")
		AND ("B"."LOCAL1"<"A"."LOCAL2" OR "B"."LOCAL2"<="A"."LOCAL2"))        
  16 - filter("PRG_LEX_PROGRAMME"."LIBELLE"='Grosses réparations')              
  17 - access("PRG_OPERATION"."ID_PRG_LEX_PROGRAMME"="PRG_LEX_PROGRAMME"."ID_PRG_LEX_PROGRAMME")                                                                
  18 - filter("LEX_COM_ARD"."NOM_ARD"='Rennes')                                 
  19 - access("PRG_OPERATION"."ID_LEX_COM_ARD"="LEX_COM_ARD"."ID_LEX_COM_ARD")  
  20 - filter("PRG_LEX_ETAT"."LIBELLE"='Voté')                                  
  21 - access("PRG_OPERATION"."ID_PRG_LEX_ETAT"="PRG_LEX_ETAT"."ID_PRG_LEX_ETAT") 
  23 - access("PRG_OPERATION"."ID_PRG_LEX_SOUS_PROGRAMME"="PRG_LEX_SOUS_PROGRAMME"."ID_PRG_LEX_SOUS_PROGRAMME")                                                             
 
Note                                                                            
-----                                                                           
   - dynamic sampling used for this statement                                   
 
 
Statistiques
----------------------------------------------------------                      
       1978  recursive calls                                                    
          0  db block gets                                                      
     413861  consistent gets                                                    
          0  physical reads                                                     
          0  redo size                                                          
       6002  bytes sent via SQL*Net to client                                   
        425  bytes received via SQL*Net from client                             
          6  SQL*Net roundtrips to/from client                                  
         64  sorts (memory)                                                     
          0  sorts (disk)                                                       
         61  rows processed
Si quelqu'un a une idée, je suis preneur.

Merci d'avance...