За допомогою 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)стовпцях