Всегда ли предпочтительнее varchar (MAX)?

Что касается SQL Server, я понимаю:

  • var означает, что память распределена лениво, что означает, что она точно соответствует данным (при вставке).

  • MAX означает, что ограничение\ограничение по размеру отсутствует.

Тогда всегда желательно использовать MAX при использовании varchar, так как мы все равно не выделяем весь размер?

Должны ли мы использовать постоянный размер только в том случае, если есть ограничение, которое мы хотим применить в этом столбце базы данных?

Ответ 1

Есть очень хорошая статья по этому вопросу от SO User @Remus Rusanu. Вот снипп, который я украл, но я предлагаю вам прочитать все это:

Путь к коду, который обрабатывает типы MAX (varchar, nvarchar и varbinary) отличается от пути кода, который обрабатывает их эквивалентные типы длины без макс. Типы без макс могут быть внутренне представленной как обычная структура указателя и длины. Но максимальная типы не могут быть сохранены внутренне как смежная область памяти, поскольку они могут расти до 2 ГБ. Поэтому они должны быть представлены потоковый интерфейс, аналогичный COMs IStream. Это переносится на каждая операция, которая включает в себя максимальные типы, включая простые назначение и сравнение, поскольку эти операции сложнее над потоковым интерфейсом. Наибольшее влияние в коде видно который выделяет и назначает переменные максимального типа (мой первый тест), но воздействие проявляется при каждой операции.

В этой статье он показывает несколько примеров, демонстрирующих, что использование varchar (n) обычно повышает производительность.

Здесь вы можете найти всю статью .

Ответ 2

Посмотрите на хороший ответ:

Должен ли я использовать varchar (n) или varchar (MAX)?

Короткий ответ заключается в том, что с точки зрения хранилища это одно и то же, но с точки зрения оптимизации запроса лучше использовать varchar (N).

Ответ 3

Вот что рекомендует Microsoft:

  • Используйте char, когда размеры записей данных столбца согласованы.
  • Используйте varchar, когда размеры записей данных столбца значительно различаются.
  • Используйте varchar (max), когда размеры записей данных столбца сильно различаются, а размер может превышать 8 000 байт.

ref

Ответ 4

Чтобы быть достаточно откровенным в этом вопросе, ответ НЕТ. Всегда предпочтительнее использовать varchar (N), и если вы знаете, что размер не изменится, тогда char (N). Типы MAX не поддерживают и не могут поддерживать большинство встроенных функций SQL, поэтому вы не можете добавлять индексы, выполнять объединения и выполнять эффективный поиск по этим типам. Кстати, это одна из причин, почему полнотекстовый поиск существует в SQL Server.

Кроме того, varchar (max) предотвращает возможность выполнять онлайн-индексы против всей таблицы, которая содержит поле varchar (max). Это значительно повлияет на производительность вашей системы.

Varchar (max) должен использоваться только тогда, когда размер поля, как известно, превышает 8K. В каждом другом случае необходимо указать размер. Несоблюдение этого требования - плохой дизайн, а приведет к проблемам с производительностью для любых, но наиболее тривиальных систем.

Некоторые ссылки: