Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So optimieren Sie eine Oracle-Abfrage, die to_char in der Where-Klausel für das Datum enthält

Wenn Sie einen Ausführungsplan erstellen für Ihre erste Anfrage ...

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'
/

... würden Sie sehen, dass es einen vollständigen Tabellenscan durchführt. Das liegt daran, dass to_char() verhindert die Verwendung Ihres Index am CREATE DATE.

Du sagst nicht, wie lange es gedauert hat, die Ergebnisse zurückzugeben, als du gelaufen bist ...

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')
/

... aber ich schätze, es war viel näher an 0,14 Sekunden als an 4 Minuten.