Подтвердить что ты не робот

Разница между варчаром (5) и варчаром (5000)?

Возможный дубликат:
есть ли преимущество для varchar (500) по varchar (8000)?

В SQL Server мы можем указать тип поля varchar(n):

Размер хранилища - это фактическая длина в байтах введенных данных, а не n байтов.

Часто при планировании структуры базы данных я пытаюсь представить максимально возможную длину строк, которые должны быть сохранены в этих полях varchar, а затем установить этот предполагаемый размер + некоторую резервную копию для поля varchar. Иногда может случиться так, что изначально предоставленного помещения недостаточно для поля, а затем мне нужно увеличить длину.

Но на самом деле стоит ли ограничивать поле varchar некоторым значением, а не просто устанавливать что-то вроде varchar(5000) или даже varchar(max), которое будет 100% соответствовать делу? Есть ли какие-либо преимущества в организации страниц в SQL Server или организации индекса, когда я ограничиваю эту длину n?

Обновление

Вот что я имею в виду (преимущество): qaru.site/info/435968/...

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

Является ли это выше? И есть ли другие преимущества?

4b9b3361

Ответ 1

С одной стороны, вы НЕ МОЖЕТ индексировать любой столбец размером более 900 байтов.

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

Используйте соответствующий размер.

Также: varchar добавляет не менее 2 байтов служебных данных, поэтому для строк из 10 символов или меньше я всегда рекомендую использовать char(n) вместо этого.

char(5) будет использовать 5 байтов памяти - всегда. varchar(5) использует от 2 до 7 байт памяти.

Ответ 2

MS SQL Server хранит varchar (8000) и короче по сравнению с varchar (MAX).

Размер, при котором типы MAX переносятся из страниц данных таблицы и в свои собственные страницы данных теперь фиксируется на уровне 8000 байт, если [большое значение типы из строки] установлено на ВЫКЛ.

Существует несколько причин, по которым вы должны использовать varchar (n) вместо varchar (MAX)

Производительность

varchar (n) быстрее http://rusanu.com/2010/03/22/performance-comparison-of-varcharmax-vs-varcharn/

Индексация

varchar (900) и меньше можно индексировать, но не varchar (MAX) или varchar (901) или больше

Совместимость

MS SQL Server Compact Edition не поддерживает varchar (MAX)