71 votes

Est-il possible d'avoir un index basé sur la fonction dans MySQL ?

Je me souviens dans Oracle, il est possible d'indexer en fonction d'une fonction, par exemple `` .

MySQL prend-il cela en charge? Si ce n'est pas le cas, y a-t-il une autre solution?

61voto

paxdiablo Points 341644

Non, pas dans un sens général, je ne crois pas même 5.6 dispose de cette fonctionnalité. Il est possible de n'utiliser que le leader de la partie d'une colonne (cette fonctionnalité a été autour pendant un long moment), mais pas à partir de la deuxième ou les caractères suivants, ou toute autre fonction plus complexe.

Par exemple, le code suivant crée un index à l'aide des 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 une autre colonne avec la fraise de données, puis à l'aide d'insérer/mettre à jour des déclencheurs pour s'assurer qu'il est rempli correctement.

Autre que le gaspillage de l'espace pour les données redondantes, c'est à peu près la même chose.

Et, bien que techniquement viole 3FN, qui est atténué par l'utilisation de déclencheurs pour synchroniser les données (c'est quelque chose qui est souvent fait pour une performance accrue).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X