2017-10-04 1 views

Répondre

1

Alors pourquoi ne pas utiliser nvarchar(2) pour vous assurer que seulement 2 caractères ont été écrits? C'est une contrainte, là pour s'assurer que les données sont conformes à une attente.

De plus, si vous savez que les valeurs ne seront jamais que ASCII, utilisez varchar au lieu de nvarchar.

Enfin, la contrainte de longueur n'aura aucun effet sur l'article IN en supposant que toutes les valeurs dépassent jamais la longueur de 2.

+0

j'aurais spécifié. Je suis le plus curieux de la performance. Avoir un champ trop long affecte-t-il la vitesse dans une clause where, par exemple? –

+0

@PatrickSchomburg - Ce qui compte, c'est la valeur dans le domaine. Avoir une longueur de champ de 2000 et stocker 2 caractères n'aura aucun effet avec une clause 'where'. Ce qui aurait un effet, c'est le nombre d'enregistrements, comment vous comparez, et les index (s'ils sont là, comment ils sont structurés, sont-ils fragmentés). La seule vraie exclusion à cela est la longueur 'max' car les valeurs pourraient s'étendre sur des pages dans un chevauchement, auquel cas je ne suis pas sûr de savoir comment une indexation fonctionnerait mais cela affecte uniquement les valeurs qui dépassent 4000 (je crois). – Igor

+0

Y a-t-il un avantage/désavantage à utiliser une valeur nulle par rapport à une chaîne vide pour ce scénario? –

1

J'utiliser nchar(2) pour unicode ou char(2) pour non unicode si la taille est toujours 2 ou null. L'utilisation d'une colonne de taille variable surdimensionnée affecte les allocations de mémoire et les estimations de taille de ligne, car SQL Server supposera que chaque ligne contient une valeur correspondant à la moitié de la taille de colonne déclarée; Bien que cela ne soit pas un facteur significatif avec une largeur de 50, il fait une différence plus marquée sur les grandes tailles.

Référence: