2010-09-10 10 views
21

Je veux savoir ce que sont les avantages et les inconvénients tout en utilisant varchar (500) vs Varchar (max) en termes de performance, de mémoire et de toute autre chose à considérer? Est-ce que les deux utiliseront la même quantité d'espace de stockage?différence entre varchar (500) vs varchar (max) en serveur SQL

La réponse est différente pour SQL Server 2000/2005/2008?

+2

[Voir ma réponse ici pour une autre différence] (http://stackoverflow.com/questions/2009694/is-there-an-advantage-to-varchar500-over-varchar8000/5654947#5654947) et ce blog [ par Remus Rusanu] (http: // rusanu.com/2010/03/22/performance-comparaison-de-varcharmax-vs-varcharn /) –

+0

Regardez le lien: http://stackoverflow.com/q/28980502/1805776 – vicky

Répondre

29

Dans SQL Server 2000 et SQL Server 7, une taille ne peut pas dépasser 8000 octets. Cela signifie qu'une colonne VARBINARY ne peut stocker que 8000 octets (en supposant que c'est la seule colonne d'une table), une colonne VARCHAR peut stocker jusqu'à 8000 caractères et une colonne NVARCHAR peut stocker jusqu'à 4000 caractères (2 octets par caractère Unicode). Cette limitation provient de la taille de page interne de 8 Ko utilisée par SQL Server pour enregistrer les données sur le disque. Pour stocker davantage de données dans une seule colonne, vous devez utiliser les types de données TEXT, NTEXT ou IMAGE (BLOB) qui sont stockés dans un ensemble de 8 pages de données de données distinctes des pages de données qui stockent les données. autres données dans le même tableau. Ces pages de données sont organisées dans une structure B-tree. Les BLOB sont difficiles à travailler et à manipuler. Ils ne peuvent pas être utilisés comme variables dans une procédure ou une fonction et ils ne peuvent pas être utilisés à l'intérieur de fonctions de chaîne telles que REPLACE, CHARINDEX ou SUBSTRING. Dans la plupart des cas, vous devez utiliser les commandes READTEXT, WRITETEXT et UPDATETEXT pour manipuler les objets BLOB. Pour résoudre ce problème, Microsoft a introduit les types de données VARCHAR (MAX), NVARCHAR (MAX) et VARBINARY (MAX) dans SQL Server 2005. Ces types de données peuvent contenir la même quantité de données que les BLOB peuvent contenir (2 Go).) et ils sont stockés dans le même type de pages de données utilisées pour d'autres types de données. Lorsque les données d'un type de données MAX dépassent 8 Ko, une page de débordement est utilisée. SQL Server 2005 attribue automatiquement un indicateur de dépassement de capacité à la page et sait comment manipuler les lignes de données de la même manière qu'il manipule d'autres types de données. Vous pouvez déclarer des variables de types de données MAX dans une procédure ou une fonction stockée et même les transmettre en tant que variables. Vous pouvez également les utiliser à l'intérieur des fonctions de chaîne.

Microsoft recommande d'utiliser des types de données MAX au lieu des objets BLOB dans SQL Server 2005. En fait, les objets BLOB sont désormais obsolètes dans les prochaines versions de SQL Server.

Crédit: http://www.teratrax.com/articles/varchar_max.html


Dans SQL Server 2005 et SQL Server 2008 , La taille de stockage maximale pour VARCHAR (MAX) est 2^31-1 octets (2,147,483,647 octets ou 2 Go - 1 octets). La taille de stockage est la longueur réelle des données entrées + 2 octets. Les données saisies peuvent être de 0 caractères. Comme chaque caractère d'un type de données VARCHAR utilise un octet, la longueur maximale pour un type de données VARCHAR (MAX) est 2 147 483 645.

Lect Intéressant pour vous: http://www.sql-server-helper.com/faq/sql-server-2005-varchar-max-p01.aspx

Référence: http://msdn.microsoft.com/en-us/library/ms143432.aspx

+1

+1 Réponse très détaillée. –

+0

La seule chose que j'ajouterais est un autre commentaire sur les limitations de 2000 - implicite dans ce qui précède - que si vous avez plusieurs colonnes varchar, leur longueur cumulée ne peut pas dépasser 8000 –

+0

D'accord avec Paul, une autre chose est, est en cas de varchar (500) il est auto contraint avec la longueur et dans le cas de varchar (max) ce n'est pas le cas. Alors c'est aussi bien. une chose de plus, sera-t-il utile pour SQL Server d'utiliser varchar (500) ou varchar (max) dans tous les cas pour allouer de la mémoire lors de l'insertion d'enregistrements alors que nous avons besoin de seulement 500 caractères pour y stocker? –

2

Une colonne VARCHAR(MAX) acceptera une valeur de 501 caractères ou plus alors qu'une colonne VARCHAR(500) ne sera pas. Donc, si vous avez une règle métier qui limite une valeur à 500 caractères, VARCHAR(500) sera plus approprié.