Bonjour,

Voici l'explain plan d'une requête :

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
 
SELECT COUNT(*)
FROM DO_LOT_DOSSIER DOS
    ,SE_CAS CAS
    ,DO_LOT_ENTETE ENT
    ,DO_LOT_BON BON
    ,INT_IDENT_ROLE IDROLE
    ,AS_PRODUIT PROD
    ,AS_PRODUIT PROD2
  WHERE DOS.SE_CAS_ID = CAS.ID
and BON.DO_LOT_ENT_ID = ENT.ID
and BON.DO_LOT_ENT_ID = DOS.DO_LOT_ENT_ID
and BON.SE_CAS_ID = DOS.SE_CAS_ID
and BON.INT_TIDENT_CI = DOS.INT_TIDENT_CI
and BON.INT_IDROLE_ID = DOS.INT_IDROLE_ID
and IDROLE.ID = DOS.INT_IDROLE_ID
and PROD.ID(+) = BON.AS_PROD_ID
and PROD2.ID(+) = BON.AS_PROD_VEHI_ID
 
call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        2      0.03       0.02          0          0          0           0
Execute      2      0.00       0.00          0          0          0           0
Fetch        4      4.18       4.66       8826    2475294          0           2
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        8      4.21       4.69       8826    2475294          0           2
 
Misses in library cache during parse: 1
Optimizer goal: CHOOSE
Parsing user id: 23  (IDINFO)
 
Rows     Row Source Operation
-------  ---------------------------------------------------
      1  SORT AGGREGATE 
 221227   NESTED LOOPS  
 221227    NESTED LOOPS  
 221227     NESTED LOOPS  
 221244      NESTED LOOPS OUTER 
 221244       NESTED LOOPS OUTER 
 221244        NESTED LOOPS  
 221244         TABLE ACCESS FULL DO_LOT_BON 
 221244         INDEX UNIQUE SCAN DO_LOT_ENT_PK (object id 7773)
 221205        INDEX UNIQUE SCAN AS_PROD_PK (object id 6579)
 125737       INDEX UNIQUE SCAN AS_PROD_PK (object id 6579)
 221227      INDEX UNIQUE SCAN DO_LOTDOSS_UK (object id 7771)
 221227     INDEX UNIQUE SCAN INT_IDROLE_PK (object id 8154)
 221227    INDEX UNIQUE SCAN SE_INTERV_PK (object id 9027)
 
 
Rows     Execution Plan
-------  ---------------------------------------------------
      0  SELECT STATEMENT   GOAL: CHOOSE
      1   SORT (AGGREGATE)
 221227    NESTED LOOPS
 221227     NESTED LOOPS
 221227      NESTED LOOPS
 221244       NESTED LOOPS (OUTER)
 221244        NESTED LOOPS (OUTER)
 221244         NESTED LOOPS
 221244          TABLE ACCESS   GOAL: ANALYZED (FULL) OF 
                     'DO_LOT_BON'
 221244          INDEX   GOAL: ANALYZED (UNIQUE SCAN) OF 
                     'DO_LOT_ENT_PK' (UNIQUE)
 221205         INDEX   GOAL: ANALYZED (UNIQUE SCAN) OF 'AS_PROD_PK' 
                    (UNIQUE)
 125737        INDEX   GOAL: ANALYZED (UNIQUE SCAN) OF 'AS_PROD_PK' 
                   (UNIQUE)
 221227       INDEX   GOAL: ANALYZED (UNIQUE SCAN) OF 'DO_LOTDOSS_UK' 
                  (UNIQUE)
 221227      INDEX   GOAL: ANALYZED (UNIQUE SCAN) OF 'INT_IDROLE_PK' 
                 (UNIQUE)
 221227     INDEX   GOAL: ANALYZED (UNIQUE SCAN) OF 'SE_INTERV_PK' 
                (UNIQUE)
Comme vous pouvez le voir, il utilise presque partout des index, il n'y a que sur la table "DO_LOT_BON" qu'il fait un "ANALYZED (FULL)", est-il possible de diminuer le temps d'exécution de cette requête? Dans cette requête, je n'ai pas mis les colonnes que doit retourner le select, en effet ce select permet la création d'une vue.

Au niveau du nombre de ligne par table :

DO_LOT_BON : 247092
DO_LOT_ENTETE : 2636
DO_LOT_DOSSIER : 37568
SE_CAS : 18349
INT_IDENT_ROLE : 7246
AS_PRODUIT : 3822

Est-ce que l'ordre de déclaration de la clause FROM peut avoir une incidence sur les performances?

Merci d'avance pour vos conseils avisés.

Cédric