Влияет ли длина поля базы данных (максимальная) на производительность?

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

многие поля, похоже, имеют большие ограничения (например:NVARCHAR(MAX)), которые не дошли.

произвольно ли делает поля их максимальной шириной или в 2-3 раза больше, чем обычно вводится отрицательно влияет на производительность?

Как сбалансировать производительность с длиной поля? Есть ли баланс?

3 ответов


в этом вопросе есть две части:

использование NVARCHAR над VARCHAR снижает производительность? Да, хранение данных в полях Unicode удваивает требования к хранению. Ваши данные, хранящиеся в этих полях, в 2 раза больше, чем нужно (до выхода SQL Server 2008 R2, который включает сжатие Юникод. Сканирование таблиц займет в два раза больше времени, и только половина данных может храниться в памяти в буферном кэше.

делает использование MAX hurt представление? Не напрямую, но при использовании VARCHAR(MAX), NVARCHAR(MAX) и таких полей, и если вам нужно индексировать таблицу, вы не сможете перестроить эти индексы в интернете в SQL Server 2005/2008/R2. (Denali приносит некоторые улучшения вокруг таблиц с максимальными полями, поэтому некоторые индексы могут быть перестроены в интернете.)


да, оптимизатор запросов может угадать, сколько строк в странице, если у вас много varchar поля, которые больше, чем необходимо, SQL Server может внутренне угадать неправильное количество строк.


для исполнения, ответ нет в большинстве случаев. Я думаю, вы можете проанализировать производительность с уровня приложения: собрать данные, получить требования, а затем сделать некоторый анализ. Узкое место может быть вызвано кодом приложения, SQL или дизайном схемы.