Как разрешить индекс ограничения длины ключа 900 для столбца с типом данных varchar (4096) в SQL Server 2005? - PullRequest
3 голосов
/ 04 июня 2010

Это запрос на создание индекса создать индекс idx_ncl_2 для BFPRODATTRASSOCIATION (значение, атрибут) включить (productid)

Структура таблицы BFPRODATTRASSOCIATION

ProdAttrAssociationId bigint no 8
ProductId             bigint no 8
AttributeId           bigint  no  8
Value                 varchar no 4096

Я получаю эту ошибку:

Максимальная длина ключа составляет 900 байтов. Индекс "idx_ncl_2" имеет максимальную длину 1237 байт.

Мне нужно создать некластеризованный индекс для этого столбца. Можно ли каким-либо образом создать индекс для столбца с типом данных varchar и размером больше 900.

Пожалуйста, предложите.

Ответы [ 2 ]

12 голосов
/ 04 июня 2010

Вы не можете - поскольку в сообщении об ошибке уже четко указано, любая запись индекса не может иметь длину более 900 байт.

Вы не можете индексировать поле varchar (4096) - точка. Обойти это невозможно - это жесткое ограничение для SQL Server - нет способа его настроить, изменить, увеличить. См. Books Online - Максимальный размер индексных ключей для подтверждения.

Вам нужно либо ограничить свой столбец «значение» менее 900 байтов, либо найти другой способ хранения этих данных - либо просто не включать их в индекс. Если вы хотите, чтобы ваше поле «значение» в индексе имело покрывающий индекс (чтобы можно было удовлетворить запросы из записи индекса), вы можете переместить это поле в включенный столбец в индексе - они не подпадают под ограничение в 900 байт.

CREATE NONCLUSTERED INDEX idx_ncl_2 
  ON BFPRODATTRASSOCIATION(attributeid) 
  INCLUDE (productid, value)

Этот индекс должен работать.

4 голосов
/ 04 июня 2010
...