Bonjour, je voudrai un peu d'aide sur la comparaison de deux plan d'exécution :
Alors des deux plans sont issus de la même requette sauf la condition suivante :
Plan 1 temps d'exécution 15 min
Plan 2 temps d'exécution 2 min
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 declare c_cod_EFF constant char(3) :='EFF' c_cod_PRV constant char(3) :='PRV' Rq : where cp.cod_etat in (c_cod_EFF, c_cod_EFF)
Le champs cp.cod_etat est de type varchar2(3)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 declare c_cod_EFF constant cp.cod_etat%type :='EFF' c_cod_PRV constant cp.cod_etat%type :='PRV' Rq : where cp.cod_etat in (c_cod_EFF, c_cod_EFF)
Je sais que lorsque une condition compare deux données qui ne sont pas du même DATATYPE
ORACLE convertit toutes les données du champs en datatype de la variable et ensuite compare les valeurs.
Dc le plan 1 qui compare des CHAR(3) avec un VARCHAR2(3) prend bcp plus de temps que le plan deux qui compare un
VARCHAR2 avec un VARCHAR2 (dc pas besoin de conversion)
: Voici les deux plan d'exécution, et je ne trouve pas où on peut voir qu'ORACLE mets plus de temps sur la PLAN 1 que le PLAN 2
KK1 peut me dire quelle ligne est importante dans ces plan d'exécution ?
Plan 1 temps d'exécution 15 min
Plan 2 temps d'exécution 2 min
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 Operation Object Name Rows Bytes Cost Object Node In/Out PStart PStop SELECT STATEMENT Optimizer Mode=CHOOSE 1 170 SORT ORDER BY 1 65 68 FILTER TABLE ACCESS BY INDEX ROWID ETOILE.AC_CONDPART_GLC 1 65 68 INDEX RANGE SCAN ETOILE.I_CONDPART_GLC_COD_PRODUIT 439 3 TABLE ACCESS FULL SYS.DUAL 82 3 TABLE ACCESS FULL SYS.DUAL 82 3 TABLE ACCESS FULL SYS.DUAL 82 3 NESTED LOOPS 1 53 102 TABLE ACCESS BY INDEX ROWID ETOILE.AC_FACTUR 1 40 100 INDEX RANGE SCAN ETOILE.I_FACTUR_1 123 4 TABLE ACCESS FULL SYS.DUAL 82 3 TABLE ACCESS FULL SYS.DUAL 82 3 TABLE ACCESS FULL SYS.DUAL 82 3 INDEX RANGE SCAN ETOILE.PK_LIGNEDETAIL_FCT 1 13 3
Merci de votre aide
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 Operation Object Name Rows Bytes Cost Object Node In/Out PStart PStop SELECT STATEMENT Optimizer Mode=CHOOSE 1 202 SORT ORDER BY 1 65 202 FILTER TABLE ACCESS BY INDEX ROWID ETOILE.AC_CONDPART_GLC 1 65 201 INDEX RANGE SCAN ETOILE.I_CONDPART_GLC_COD_PRODUIT 1 K 6 TABLE ACCESS FULL SYS.DUAL 82 3 TABLE ACCESS FULL SYS.DUAL 82 3 TABLE ACCESS FULL SYS.DUAL 82 3 FILTER NESTED LOOPS 1 53 102 TABLE ACCESS BY INDEX ROWID ETOILE.AC_FACTUR 1 40 100 INDEX RANGE SCAN ETOILE.I_FACTUR_1 123 4 TABLE ACCESS FULL SYS.DUAL 82 3 TABLE ACCESS FULL SYS.DUAL 82 3 TABLE ACCESS FULL SYS.DUAL 82 3 INDEX RANGE SCAN ETOILE.PK_LIGNEDETAIL_FCT 1 13 3
Partager