Как разрешить 900 key length limit index для столбца, имеющего тип данных varchar (4096) в SQL Server 2005?


Это запрос для создания индекса создать индекс idx_ncl_2 на BFPRODATTRASSOCIATION (value,attributeid) include (productid)

Табличная структура BFPRODATTRASSOCATION

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

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

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

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

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

2 3

2 ответа:

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

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

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

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

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