Всегда ли предпочтительнее 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. В каждом другом случае необходимо указать размер. Несоблюдение этого требования - плохой дизайн, а приведет к проблемам с производительностью для любых, но наиболее тривиальных систем.
Некоторые ссылки: