sexta-feira, julho 07, 2006

Oracle - Performance X uso de funções

É comum encontrarmos queries com a utilização de funções (to_date, to_char, etc...) em colunas na clausura Where, como o exemplo abaixo:
 
( to_date(to_char(ac1.dataacid,'dd/mm/yyyy'),'dd/mm/yyyy')  >= :VIDDataInicial_AnoI )
 
O problema dessa implementação é que ao utilizarmos uma função na coluna, o Oracle deixa de utilizar algum índice que exista nessa coluna.
 
Por isso, SEMPRE devemos utilizar as funções nos parâmetros. Dessa forma, a comparação acima ficaria:
 
ac1.dataacid >= to_date(to_char(:VIDDataInicial_AnoI,'dd/mm/yyyy' ) || ' 00:00:00', ,'dd/mm/yyyy hh24:mi:ss') AND
 

Nenhum comentário: