Oracle
 sql >> Database >  >> RDS >> Oracle

Come ottimizzare una query Oracle che ha to_char in where clausola per date

Se dovessi generare un piano di esecuzione per la tua prima domanda...

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

... vedresti che esegue una scansione completa della tabella. Questo perché to_char() impedisce l'uso del tuo indice su CREATE DATE.

Non dici quanto tempo ci è voluto per restituire i risultati quando hai eseguito ...

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

... ma mi aspetto che fosse molto più vicino a 0,14 secondi che a 4 minuti.