2010-08-24 21 views
0

En termes de performance, ce qui sera plus rapide, utilisez un BIT(1) NULL (null = inconnu, 0 = masculin, 1 = féminin) ou ENUM('unknown', 'male', 'female') NOT NULL DEFAULT 'unknown' dans MySQL MyISAM?BIT (1) vs ENUM ('inconnu', 'masculin', 'féminin') dans MySQL

Ou est-ce considéré comme micro-optimisation?

[EDIT]

Je pense que je vais utiliser ENUM('male', 'female') DEFAULT NULL

+3

Micro-optimisation. Choisissez ce qui est plus significatif/sémantiquement correct. – delnan

+1

Plus rapide en termes de performances pour quoi faire? Insérer des millions de lignes de données? Interroger pour tous les utilisateurs d'un genre particulier? Autre chose? –

+0

Null ne signifie pas exactement "unknown" et cela peut causer des problèmes avec vos requêtes SQL. Tout d'abord, traiter avec null signifie une syntaxe supplémentaire farfelue que vous pouvez éviter. Deuxièmement, il y a l'illogique drôle de l'informatique avec null, où nul par rapport à tout est nul. Et si un eunich arrive? – Ian

Répondre

4

Oui, c'est microoptimization. Les performances seront dominées par d'autres choses, et de toute façon les champs nullables prennent plus d'espace (pour un drapeau nul) donc utilisez l'énumération significative.

1

Je considère cette micro-optimisation.

Je voudrais aller à l'option ENUM, parce que la signification de toutes les valeurs est complètement claire sans lire la documentation. L'option bit est un peu vague.

En ce qui concerne les performances, j'ai l'impression que la valeur NULL est généralement mauvaise, mais que je ne trouve pas de références pour le moment.