web-dev-qa-db-fra.com

AVANTAGE DE PERFORMANCE MYSQL ENUM?

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?

50
gsueagle2008

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? "

45
Bill Karwin

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.

24
John Douthat

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?

11
Guillaume Gendre