Oracle ofrece la posibilidad de crear índices basados en funciones. Esto ha sido muy útil en mi caso particular, en el que el desarrollador necesita que sea posible buscar por los 3 primeros caracteres de una columna de artículos.

La tabla llamémosla PRODUCT y el campo con los nombres de artículos NAME:

CREATE INDEX product_name_sub_idx ON product substr(name,1,3)

Importante: El parámetro QUERY_REWRITE_ENABLED debe estar establecido en TRUE.


Lo que antes era un costoso LIKE:
    select name from product where name like 'MUE%';
ahora podría ser un igual:
    select name from product where substr(name,1,3) = 'MUE';

Esto según la documentación, porque algo sorprendente, o al menos inesperado por mí tras observar los planes de ejecución, es que con el operador LIKE, Oracle también hace uso del nuevo índice, incluso si la búsqueda sobrepasa el número de caracteres indicados en la función aprovecha el índice, por ejemplo:

select name from product where name like 'MUESLI%';

En este  caso, la tabla tiene medio millón de registros y la misma consulta ha pasado de tardar unos 8 segundos a menos de 200 ms.