Requête paramétrisée plus lente que requête non paramétrisée
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:
1 2 3 4 5 6 7
|
SELECT *
FROM TTABLE
WHERE 0 = 0
AND dateSaisie >= :dateSaisie
AND type = :type
ORDER BY idt DESC; |
Code:
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:
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:
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