За допомогою VARCHAR(MAX)
ви в основному говорите SQL Server "зберігати значення в цьому полі, як вам найкраще бачиться", тоді SQL Server вирішить, чи слід зберігати значення як звичайні VARCHAR
чи як LOB (великий об'єкт). Загалом, якщо збережені значення менше 8000 байт, SQL Server буде розглядати значення як звичайний VARCHAR
тип.
Якщо значення, які зберігаються, занадто великі, то стовпець може виливати сторінку на сторінки LOB, точно так, як це робиться для інших типів LOB ( text
, ntext
і image
) - якщо це трапляється, для зчитування даних, що зберігаються в на додаткових сторінках (тобто існує певна продуктивність), однак це відбувається лише в тому випадку, якщо збережені значення занадто великі .
Насправді в рамках SQL Server 2008 або пізнішої версії дані можуть переливатися на додаткові сторінки, навіть із фіксованою довжиною типів даних (наприклад VARCHAR(3,000)
), однак ці сторінки називаються сторінками даних із переповненням рядків і трактуються дещо інакше.
Коротка версія: з точки зору зберігання немає недоліків використання VARCHAR(MAX)
більш VARCHAR(N)
для деяких N
.
(Зверніть увагу, що це також стосується інших типів полів змінної довжини NVARCHAR
та VARBINARY
)
FYI - Ви не можете створювати індекси в VARCHAR(MAX)
стовпцях