Un ejemplo típico es el uso de UPPER(columna) o el abuso de LIKE:
SELECT *En este caso, una barrida por toda la tabla (FULL SCAN TABLE) es inevitable.
FROM my_big_table
WHERE buffer LIKE 'FF-%';
El uso de LIKE compromete el uso de índices resultando en baja peformance.
Usando la función substr podemos evitar el LIKE en este caso, ya que tenemos siempre le mismo prefijo 'FF-'. Para mejorar la ejecución, podemos crear un índice de función como el que sigue:
CREATE INDEX ix_my_big_table_01 ON my_big_table(substr(buffer,1,4));La consulta quedaría entonces de esta forma:
SELECT *Para que el índice sea tenido en cuenta por Oracle, necesitamos contar con el privilegio de sistema QUERY REWRITE y dos parámetros de la base seteados: query_rewrite_enabled=TRUE y query_rewrite_integrity=TRUSTED
FROM my_big_table
WHERE substr(buffer,1,4) = 'FF-';
Ver también:
Mis índices no funcionan!
Indices condicionales
11g y sus índices invisibles
No hay comentarios:
Publicar un comentario