Mysql
 sql >> Base de données >  >> RDS >> Mysql

Est-il possible d'avoir un index basé sur les fonctions dans MySQL ?

Non, pas dans un sens général, je ne crois pas que même 5.6 (la dernière version lorsque cette réponse a été écrite pour la première fois) ait cette fonctionnalité. Il convient de noter que les versions 8.0.13 et supérieures prennent désormais en charge index fonctionnels , vous permettant d'obtenir ce dont vous avez besoin sans la méthode de déclenchement décrite ci-dessous.

Si vous utilisez une ancienne version de mysql , c'est c'est possible de n'utiliser que le premier partie d'une colonne (cette fonctionnalité existe depuis longtemps), mais pas une partie commençant au deuxième caractère ou aux suivants, ou toute autre fonction plus complexe.

Par exemple, ce qui suit crée un index en utilisant les cinq premiers caractères d'un nom :

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

Pour des expressions plus complexes, vous pouvez obtenir un effet similaire en ayant un autre colonne contenant les données indexables, puis utilisez des déclencheurs d'insertion/mise à jour pour vous assurer qu'elle est correctement renseignée.

À part l'espace perdu pour les données redondantes, c'est à peu près la même chose.

Et, bien qu'il viole techniquement 3NF, cela est atténué par l'utilisation de déclencheurs pour synchroniser les données (c'est quelque chose qui est souvent fait pour des performances accrues).