sql >> Base de Datos >  >> RDS >> Oracle

Cómo optimizar una consulta de Oracle que tiene to_char en la cláusula where para la fecha

Si tuviera que generar un plan de ejecución para su primera consulta...

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

... vería que hace un escaneo completo de la tabla. Eso es porque to_char() evita el uso de su índice en FECHA DE CREACIÓN.

No dices cuánto tiempo se tardó en devolver los resultados cuando ejecutaste...

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

... pero supongo que estuvo mucho más cerca de 0,14 segundos que de 4 minutos.