sql >> Base de Datos >  >> RDS >> Mysql

¿Es posible tener un índice basado en funciones en MySQL?

No, no en un sentido general, no creo que incluso 5.6 (la última versión cuando se escribió esta respuesta por primera vez) tenga esta funcionalidad. Vale la pena señalar que 8.0.13 y superior ahora admiten índices funcionales , lo que le permite lograr lo que necesita sin el método de activación que se describe a continuación.

Si está ejecutando una versión anterior de mysql , es es posible usar solo el principal parte de una columna (esta funcionalidad ha existido durante mucho tiempo), pero no una que comience en el segundo carácter o posteriores, o cualquier otra función más compleja.

Por ejemplo, lo siguiente crea un índice usando los primeros cinco caracteres de un nombre:

create index name_first_five on cust_table (name(5));

Para expresiones más complejas, puede lograr un efecto similar al tener otro columna con los datos indexables en ella, luego use activadores de inserción/actualización para asegurarse de que se complete correctamente.

Aparte del espacio desperdiciado para datos redundantes, es más o menos lo mismo.

Y, aunque técnicamente viola 3NF, eso se mitiga mediante el uso de disparadores para mantener los datos sincronizados (esto es algo que a menudo se hace para mejorar el rendimiento).