|
Cuando se hace una consulta y la condición de filtro incluya una función de conversión (TO_NUMBER, TO_DATE, etc.), esta se debe aplicar siempre que se pueda sobre un valor constante en vez de sobre una columna. Por ejemplo, la siguiente consulta no utilizará ningún indice sobre
SELECT FROM WHERE TO_NUMBER() = 2;
Sin embargo, la siguiente consulta sí que utiliza los índices sobre la
SELECT FROM WHERE = TO_CHAR(2);
Las conversiones implícitas siguen unas normas parecidas, pero teniendo en cuenta que Oracle aplicará la función de conversión sobre el valor alfanumérico: Por ejemplo, esta consulta:
SELECT FROM WHERE = 2;
será interpretada del siguiente modo:
SELECT FROM WHERE TO_NUMBER() = 2;
Por lo tanto, desactivará los índices. Sin embargo, esta otra consulta:
SELECT FROM WHERE = '2';
será interpretada del siguiente modo:
SELECT FROM WHERE = TO_NUMBER('2');
Por lo que no desactivará los índices, ya que la función se aplica sobre el valor constante y no sobre la columna.
|