Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment optimiser une requête Oracle qui a to_char dans la clause where pour la date

Si vous deviez générer un plan d'exécution pour votre première requête ...

explain plan for 
SELECT bunch,of,stuff,create_date
FROM myTable
WHERE TO_CHAR (create_date,'MM/DD/YYYY)' >= '04/10/2010'
AND TO_CHAR (create_date, 'MM/DD/YYYY') <= '04/10/2010'
/

... vous verriez qu'il effectue un balayage complet de la table. C'est parce que le to_char() empêche l'utilisation de votre index le CREATE DATE.

Vous ne dites pas combien de temps il a fallu pour renvoyer les résultats lorsque vous avez exécuté ...

SELECT bunch,of,stuff,create_date
FROM myTable
WHERE             
create_date >= to_timestamp('04/10/2010 00:00:00.000000','MM/DD/YYYY HH24:MI:SS.FF') 
AND 
create_date <= to_timestamp('04/10/2010 23:59:59:123000','MM/DD/YYYY HH24:MI:SS.FF')
/

... mais je suppose que c'était bien plus proche de 0,14 seconde que de 4 minutes.