Y a-t-il un avantage en termes de performances à utiliser enum dans des situations où il n’ya que 5 à 10 valeurs possibles différentes pour un champ? sinon quel est l'avantage?
Réponses
Trop de publicités?Il y a une énorme performance de pénalité à l'aide d' ENUM
pour des opérations telles que:
Requête de la liste des valeurs autorisées dans l'
ENUM
, par exemple pour remplir un menu déroulant. Vous devez interroger le type de donnéesINFORMATION_SCHEMA
, et d'analyser la liste d'un champ BLOB retourné.Modifier la série de valeurs autorisées. Il implique un
ALTER TABLE
déclaration, qui verrouille la table et peut procéder à une restructuration.
Je ne suis pas un fan de MySQL ENUM
. Je préfère utiliser les tables de recherche. Voir aussi ma réponse à "Comment gérer les énumérations sans champs de type enum dans une base de données?"
Les ENUM sont représentés en interne par un entier non signé de 16 bits. Si les chaînes que vous stockez ont une taille supérieure à 2 octets et changent rarement, un ENUM est la solution. La comparaison est plus rapide avec une énumération et prend moins de place sur le disque, ce qui peut conduire à des temps de recherche plus rapides.
L'inconvénient est que les enums sont moins flexibles pour ajouter / supprimer des valeurs.
Dans cet article http://fernandoipar.com/2009/03/09/using-the-enum-data-type-to-increase-performance/ Fernando regarde dans les représentations de type Enum pour les requêtes.
Le résultat est que lors de l'utilisation d'ENUM peut sembler un peu moins élégant à partir d'une conception de point de vue (si votre valeur d'ENUM sont en train de changer parfois), le gain de performances est évident pour les grands ensembles de données. Voir son article pour plus de détails. Êtes-vous d'accord?
Non, voir une comparaison ici
L'avantage réside dans la lisibilité du code.