Варчар (Макс) всегда предпочтительнее?
что касается SQL Server, я понимаю:
var
означает, что память лениво выделена, что означает, что она точно соответствует данным (при вставке).MAX
означает, что нет ограничения по размеруограничение.
тогда, всегда ли предпочтительнее использовать MAX
при использовании varchar
, как мы не выделяем весь размер все равно?
мы должны использовать постоянный размер, только если есть ограничение, мы хотите применить этот столбец БД?
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 байт.
просто чтобы быть совершенно ясным на этот раз,ответ-нет. Всегда предпочтительнее использовать varchar(N), и если вы знаете, что размер не будет меняться, то char (N). Максимальные типы не поддерживают и не могут поддерживать большинство собственных функций SQL, поэтому вы не можете добавлять индексы, выполнять соединения и выполнять эффективный поиск по этим типам. Кстати, это одна из причин, почему возможность полнотекстового поиска существует в SQL Server.
кроме того, varchar (max) предотвращает возможность выполните онлайн-индексы против всю таблицу который содержит поле varchar (max). Это значительно повлияет на производительность вашей системы.
Varchar (max) должен использоваться только в том случае, если размер поля, как известно, превышает 8K. в каждом другом случае размер должен быть указан. Неспособность сделать это-плохой дизайн и будет привести к проблемам с производительностью на любой, но самый тривиальный из систем.
некоторые ссылки: