65 votes

Varchar (MAX) est-il toujours préférable?

Concernant SQL Server, je comprends :

  • var signifie que la mémoire est paresseux alloué en ce sens qu'elle s'adapte aux données exactement (à l'insertion).

  • MAX signifie qu'il n'existe pas de restriction de taille\limitation.

Alors, est-il toujours préférable de l'utiliser MAX lors de l'utilisation d' varchar, car nous ne pouvons pas affecter l'ensemble de la taille, de toute façon?

Doit-on utiliser une taille constante que si il y a une contrainte que nous voulons appliquer sur cette base de la colonne?

52voto

Abe Miessler Points 34869

Il y a un très bon article sur ce sujet, de SORTE que l'Utilisateur @Remus Rusanu. Voici une snippit que j'ai volé, mais je vous suggère de lire l'ensemble de la chose:

Le chemin de code qui gère le MAX de types (varchar, nvarchar et varbinary) est différent du chemin de code qui gère leur non équivalentes max types de longueur. Le non-max types peuvent être à l'interne représenté comme un pointeur ordinaire-et-la longueur de la structure. Mais le max les types ne peuvent pas être stockées en interne une zone mémoire contiguë, depuis ils peuvent peut-être se développer jusqu'à 2 go. Ils doivent donc être représenté par un interface de diffusion, semblables à COM IStream. Cela porte à plus de chaque opération qui consiste à le max de types de, y compris le simple affectation et comparaison, étant donné que ces opérations sont plus complexes au cours d'une interface de diffusion. Le plus grand impact est visible dans le code qui alloue et attribuer max-variables de type (mon premier essai), mais le l'impact est visible sur chaque opération.

Dans l'article il montre plusieurs exemples qui démontrent que l'utilisation de varchar(n) permet généralement d'améliorer les performances.

Vous pouvez trouver l'intégralité de l'article ici.

15voto

Garrett Vlieger Points 5611

Regardez ici pour une bonne réponse:

Devrais-je utiliser varchar (n) ou varchar (MAX)?

La réponse courte est que du point de vue du stockage, c'est la même chose, mais du point de vue de l'optimisation de la requête, il est préférable d'utiliser varchar (N).

11voto

O.O Points 3430

Voici ce que Microsoft recommande:

  • Utilisez char lorsque les tailles des entrées de données de colonne sont cohérentes.
  • Utilisez varchar lorsque la taille des entrées de données de colonne varie considérablement.
  • Utilisez varchar (max) lorsque la taille des entrées de données de colonne varie considérablement et peut dépasser 8 000 octets.

ref

6voto

Shane Kenyon Points 1156

Juste pour être tout à fait explicite sur ce point, la réponse est NON. Il est toujours préférable d'utiliser varchar(N), et si vous connaissez la taille ne variera pas, char(N). MAX ne sont pas et ne peuvent pas soutenir la plupart des natifs SQL dispose de sorte que vous ne peut pas ajouter des index, effectuer des jointures, ni de faire des recherches efficaces sur ces types. D'ailleurs, c'est une des raisons pourquoi le texte intégral de la capacité de recherche existe dans SQL Server.

En outre, varchar(max) empêche la possibilité d'effectuer en ligne les index à l'encontre de l' ensemble de la table qui contient le type varchar(max). Cela va grandement affecter les performances de votre système.

Varchar(max) ne devrait jamais être utilisé si la taille du champ est connu pour être de plus de 8K. Dans tous les autres cas, la taille doit être spécifié. Ne pas le faire constitue une mauvaise conception et va conduire à des problèmes de performances sur les systèmes très simples.

Quelques références:

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: