2010-11-03 6 views
7

J'ai demandé à Google mais je suis toujours confus.Indexez une colonne varchar

1) Y a-t-il un problème lors de l'indexation d'une colonne Varchar? Quand je ne devrais pas, et quand je devrais

2) Indexer une colonne de char VS Varchar.

Merci

+0

Si Vous pouvez soutenir une réponse existante, ou avoir quelque chose à ajouter, s'il vous plaît faites-le. – Costa

Répondre

4

1 - Index si vous interrogez et il est assez sélectif. Si c'est une colonne où 90% des valeurs sont les mêmes, il n'y aura pas beaucoup de points.

2 - Ce n'est pas une question, mais je suppose que vous voulez savoir si vous le devriez. Oui, si vous l'interrogez et qu'il répond aux critères ci-dessus.

+1

En effet, l'indexation (N) des colonnes varchar fonctionne bien. Seulement gotcha serait à surveiller pour la limitation de largeur de 900 octets – StuartLC

+0

Il existe des problèmes d'index avec varchar (max) et nvarchar (max), c'est pourquoi ils ne devraient pas être utilisés à moins que vous ayez l'intention de déborder la taille des varchar et nvarchar ordinaires champ. – HLGEM

+0

@HLGEM - pouvez-vous élaborer? – JNK

0

la performance générale

En théorie/conception, vous avez un modèle logique où, par exemple, le nom d'utilisateur est unique. Cependant, au moment de la mise en œuvre, vous savez que cela coûte cher (cas, accents, longueur, etc.) par rapport à l'utilisation d'une colonne de substitution "userid" qui est plus efficace en tant qu'index. Cela dit, vous auriez un index sur le nom, car il devrait être unique. La différence serait là où vous utilisez cet index: si c'est dans une table enfant en tant que colonne de clé étrangère, ce n'est pas une bonne idée. Ou en tant qu'index en cluster.

En tant qu'index unique pour une table sans FK, alors ce n'est ni ici ni là. Enfin, je voudrais juste utiliser le char/varchar pour des choses comme le code ISO ou les codes de devise (DE, EN, GBP, CHF, etc.). Mais mon seuil varie pour être honnête ...

4
  • ad 1) Oui, limite de 900 octets, clés énormes, beaucoup de pages d'index, beaucoup d'E/S impliquées, opérations d'index inefficaces. Conclusion: NE PAS, sauf si votre varchar est d'environ 50 caractères max.
  • ad 2) Identique à 1. La différence réelle entre char vs varchar sont de taille fixe par rapport à taille variable (ie. char(100)) prend toujours 100 octets dans la page de données, varchar(100) prend jusqu'à 100)
Questions connexes