Варчар (Макс) всегда предпочтительнее?


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

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

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

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

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

4 64

4 ответа:

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

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

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

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

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

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

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

вот что рекомендует microsoft:

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

ref

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

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

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

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