Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

varchar(max) partout ?

En utilisant VARCHAR(MAX) vous dites essentiellement à SQL Server "stockez les valeurs dans ce champ comme vous le voyez le mieux", SQL Server choisira alors de stocker les valeurs sous forme de VARCHAR normal ou en tant que LOB (Large object). En général, si les valeurs stockées sont inférieures à 8 000 octets, SQL Server traitera les valeurs comme un VARCHAR normal taper.

Si les valeurs stockées sont trop grandes, la colonne est autorisée à déborder de la page vers les pages LOB, exactement comme elles le font pour les autres types LOB (text , ntext et image ) - si cela se produit, des lectures de pages supplémentaires sont nécessaires pour lire les données stockées dans les pages supplémentaires (c'est-à-dire qu'il y a une performance pénalement), cependant cela ne se produit que si les valeurs stockées sont trop grandes .

En fait, sous SQL Server 2008 ou version ultérieure, les données peuvent déborder sur des pages supplémentaires, même avec les types de données de longueur fixe (par exemple, VARCHAR(3,000) ), mais ces pages sont appelées pages de données de débordement de ligne et sont traitées légèrement différemment.

Version courte : du point de vue du stockage, il n'y a aucun inconvénient à utiliser VARCHAR(MAX) sur VARCHAR(N) pour certains N .

(Notez que cela s'applique également aux autres types de champs de longueur variable NVARCHAR et VARBINARY )

Pour info - Vous ne pouvez pas créer d'index sur VARCHAR(MAX) colonnes