Existe-t-il un avantage de performance pour utiliser Enum dans des situations où il n'y a que 5-10 valeurs différentes possibles pour un champ? Sinon, quel est l'avantage?
Il y a une pénalité de performance énorme à l'aide de ENUM
pour des opérations telles que:
Requête la liste des valeurs autorisées dans le ENUM
, par exemple pour peupler un menu déroulant. Vous devez interroger le type de données de INFORMATION_SCHEMA
, et analyser la liste d'un champ de blob renvoyé.
Modifier l'ensemble des valeurs autorisées. Cela nécessite un ALTER TABLE
Déclaration, qui verrouille la table et peut faire une restructuration.
Je ne suis pas un fan de MySQL ENUM
. Je préfère utiliser des tables de recherche. Voir aussi ma réponse à " Comment gérer les énumérations sans champs d'énumération dans une base de données? "
Enums sont représentés à l'intérieur de 1 ou 2 octets, en fonction du nombre de valeurs. Si les cordes que vous stockez sont plus grandes de 2 octets et changent rarement, alors un énumé est la voie à suivre. La comparaison sera plus rapide avec une énumération et elle prend moins d'espace sur le disque, ce qui peut conduire à des heures de recherche plus rapides.
L'inconvénient est que les énumjets sont moins flexibles lorsqu'il s'agit d'ajouter/supprimer des valeurs.
Dans cet article http://fernandoipar.com/2009/03/09/USTION-Le-Enum-data-type-a-Increase-Performance/ Fernando examine les performances de type ENUM pour les requêtes.
Le résultat est que tout en utilisant Enum peut sembler un peu moins élégant d'un point de vue de conception (si votre valeur ENUM change parfois), le gain de performance est évident pour les grands ensembles de données. Voir son article pour plus de détails. Êtes-vous d'accord?