Всегда ли varchar (MAX) предпочтительнее? - PullRequest
65 голосов
/ 15 декабря 2011

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

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

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

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

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

Ответы [ 4 ]

52 голосов
/ 15 декабря 2011

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

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

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

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

15 голосов
/ 15 декабря 2011

Ищите здесь хороший ответ:

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

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

11 голосов
/ 15 декабря 2011

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

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

исх

6 голосов
/ 29 января 2014

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...