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
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)
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 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)
Le champs cp.cod_etat est de type varchar2(3)

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
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
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
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
Merci de votre aide