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