Используя VARCHAR(MAX)
, вы в основном говорите SQL Server «сохранять значения в этом поле, как вам лучше», а затем SQL Server выбирает, сохранять ли значения как обычный VARCHAR
или как LOB (большой объект), Как правило, если хранимые значения меньше 8000 байт, SQL Server будет обрабатывать значения как обычный тип VARCHAR
.
Если хранимые значения слишком велики, столбцу разрешается разливатьсо страницы на страницы больших объектов, точно так же, как и для других типов больших объектов (text
, ntext
и image
) - если это происходит, то для чтения данных, хранящихся на дополнительных страницах, требуются дополнительные чтения страниц (т. е.производительность невелика), однако это происходит только в том случае, если сохраненные значения слишком велики .
Фактически в SQL Server 2008 или более поздних версиях данные могут перетекать на дополнительные страницы даже с фиксированной длинойтипы данных (например, VARCHAR(3,000)
), однако эти страницы называются страницами с данными о переполнении строк и обрабатываются немного по-разному.
Короткая версия: с точки зрения хранения нет недостатка в использовании VARCHAR(MAX)
больше VARCHAR(N)
для некоторых N
.
(Обратите внимание, что это также относится к другим типам полей переменной длины NVARCHAR
и VARBINARY
)
К вашему сведению - вы не можете создать индексы для VARCHAR(MAX)
столбцов