sql >> Base de Datos >  >> RDS >> Oracle

¿Es substr o LIKE más rápido en Oracle?

Suponiendo que el objetivo sea el máximo rendimiento, idealmente elegiría SUBSTR(my_field,1,6) y cree un índice basado en funciones para respaldar la consulta.

CREATE INDEX my_substr_idx
    ON my_table( substr( my_field,1,6 ) );

Como otros señalan, SUBSTR(my_field,1,6) no podría usar un índice regular en MY_FIELD . La versión LIKE podría usar el índice, pero las estimaciones de cardinalidad del optimizador en ese caso son generalmente bastante pobres, por lo que es muy probable que no use un índice cuando sea útil o que use un índice cuando sea preferible un escaneo de tabla. Indexar la expresión real le dará al optimizador mucha más información para trabajar, por lo que es mucho más probable que elija el índice correctamente. Alguien más inteligente que yo puede sugerir una forma de usar estadísticas en columnas virtuales en 11g para brindar al optimizador mejor información para la consulta LIKE.

Si 6 es una variable (es decir, a veces desea buscar los primeros 6 caracteres y, a veces, desea buscar un número diferente), probablemente no podrá generar un índice basado en funciones para respaldar esa consulta. En ese caso, probablemente esté mejor con los caprichos de las decisiones del optimizador con la fórmula LIKE.