2010-09-10 4 views
21

Я хочу знать, что за плюсы и минусы, используя varchar (500) vs varchar (max) с точки зрения производительности, памяти и всего остального, чтобы рассмотреть?Разница между varchar (500) vs varchar (max) в sql-сервере

  • Будут ли использовать одинаковое количество складских мест?

Является ли ответ отличным в случае SQL Server 2000/2005/2008?

+2

[См. Мой ответ здесь для другой разницы] (http://stackoverflow.com/questions/2009694/is-there-an-advantage-to-varchar500-over-varchar8000/5654947#5654947) и этот пост в блоге [ Ремусом Русану] (http: // rusanu.com/2010/03/22/performance-comparison-of-varcharmax-vs-varcharn /) –

+0

Посмотрите на ссылку: http://stackoverflow.com/q/28980502/1805776 – vicky

ответ

29

В SQL Server 2000 и SQL Server 7 размер строки не может превышать 8000 байт. Это означает, что столбец VARBINARY может хранить только 8000 байт (при условии, что он является единственным столбцом в таблице), столбец VARCHAR может хранить до 8000 символов, а столбец NVARCHAR может содержать до 4000 символов (2 байта на символ юникода). Это ограничение связано с объемом внутренней страницы 8 КБ, который использует SQL Server для сохранения данных на диск.

Чтобы сохранить больше данных в одном столбце, вам необходимо использовать типы данных TEXT, NTEXT или IMAGE, которые хранятся в коллекции страниц данных объемом 8 КБ, которые отделены от страниц данных, которые хранят другие данные в одной таблице. Эти страницы данных расположены в структуре B-дерева. С BLOB трудно работать и манипулировать. Они не могут использоваться как переменные в процедуре или функции, и они не могут использоваться внутри строковых функций, таких как REPLACE, CHARINDEX или SUBSTRING. В большинстве случаев вам нужно использовать команды READTEXT, WRITETEXT и UPDATETEXT для управления BLOB.

Для решения этой проблемы Microsoft представила типы данных VARCHAR (MAX), NVARCHAR (MAX) и VARBINARY (MAX) в SQL Server 2005. Эти типы данных могут содержать один и тот же объем данных, которые могут храниться в BLOB (2 ГБ), и они хранятся на страницах данных того же типа, которые используются для других типов данных. Когда данные в типе данных MAX превышают 8 КБ, используется страница с превышением потока. SQL Server 2005 автоматически назначает индикатор перетока на страницу и знает, как управлять строками данных так же, как он манипулирует другими типами данных. Вы можете объявлять переменные типов данных MAX внутри хранимой процедуры или функции и даже передавать их как переменные. Вы также можете использовать их внутри строковых функций.

Корпорация Майкрософт рекомендует использовать типы данных MAX вместо BLOB в SQL Server 2005. На самом деле BLOB-версии устаревают в будущих выпусках SQL Server.

Кредит: http://www.teratrax.com/articles/varchar_max.html


В SQL Server 2005 и SQL Server 2008 , максимальный размер для хранения VARCHAR (MAX) составляет 2^31-1 байт (2,147,483,647 байт или 2 Гб - 1 байт). Размер хранилища - фактическая длина введенных данных + 2 байта. Введенные данные могут содержать 0 символов. Поскольку каждый символ в типе данных VARCHAR использует один байт, максимальная длина для типа данных VARCHAR (MAX) составляет 2 147 483 645.

Полное Интересное чтение для вас: http://www.sql-server-helper.com/faq/sql-server-2005-varchar-max-p01.aspx

Ссылка: http://msdn.microsoft.com/en-us/library/ms143432.aspx

+1

+1 Очень подробный ответ. –

+0

Единственное, что я хотел бы добавить, это еще один комментарий к ограничениям 2000 года - подразумевается выше - что если у вас несколько столбцов varchar, их общая длина не может превышать 8000 –

+0

Согласитесь с Павлом, другое дело, это в случае varchar (500) он авто ограничен длиной, а в случае varchar (max) это не так. так что тоже хорошо. еще одна вещь, будет ли полезно, чтобы сервер sql использовал varchar (500) или varchar (max) в любом случае для выделения памяти при вставке записей, в то время как нам нужно всего 500 символов для хранения в нем? –

2

VARCHAR(MAX) колонка принимает значение 501 или более символов, тогда как в VARCHAR(500) колонке не будет. Поэтому, если у вас есть бизнес-правило, которое ограничивает значение до 500 символов, более подходящим является VARCHAR(500).

Смежные вопросы