Bonjour,
Je travaille sur Oracle 10.2.0.4.
Je rencontre aujourd'hui un souci qui me laisse perplexe, et je me tourne vers vous en quête d'une explication : une certaine requête non paramétrisée est extrèmement plus rapide que la même requête paramétrisée à laquelle on aurait passé les mêmes valeurs en paramètres. (1 seconde vs 1 minute)
Ci dessous les requêtes et leur plan d'exécution.
Code Requête paramétrisée : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT * FROM TTABLE WHERE 0 = 0 AND dateSaisie >= :dateSaisie AND type = :type ORDER BY idt DESC;
Code Plan d'exécution : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Operation Object Name Rows Bytes Cost SELECT STATEMENT Optimizer Mode=CHOOSE 458 5611 SORT ORDER BY 458 631 K 5611 TABLE ACCESS BY INDEX ROWID BDD$OWNER.TTABLE 458 631 K 5092 INDEX RANGE SCAN BDD$OWNER.ITTABLE3 8 K 27
Code Requête non paramétrisée : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT * FROM TTABLE WHERE 0 = 0 AND dateSaisie >= TO_DATE('03/09/2011 00:00:00', 'MM/DD/YYYY HH24:MI:SS') AND type = 'TYPE' ORDER BY idt DESC;
Code Plan d'exécution : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Operation Object Name Rows Bytes Cost SELECT STATEMENT Optimizer Mode=CHOOSE 1 5 SORT ORDER BY 1 1 K 5 TABLE ACCESS BY INDEX ROWID BDD$OWNER.TTABLE 1 1 K 4 INDEX RANGE SCAN BDD$OWNER.ITTABLE3 1 3
S'agissant finalement du même plan, comment les coûts peuvent-il être aussi différents (moindre optimisation dans le cas de la requête paramétrisée du fait d'une moindre information ?) ?
Et surtout, pourquoi une telle différence de temps d'exécution au final ? Avez-vous des pistes pour résoudre ce souci ?
Merci d'avance,
Arnaud
Partager