Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como otimizar uma consulta Oracle que tem to_char na cláusula where para data


Se você gerar um plano de execução para sua primeira 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'
/

... você veria que ele faz uma varredura completa da tabela. Isso porque o to_char() impede o uso de seu índice em CREATE DATE.

Você não diz quanto tempo levou para retornar os resultados quando você executou ...
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')
/

... mas espero que tenha sido muito mais próximo de 0,14 segundos do que de 4 minutos.