Как разрешить 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 ответа:
Вы не можете - как уже ясно сказано в сообщении об ошибке, любая запись индекса не может иметь длину более 900 байт.
Нельзя индексировать период поля varchar(4096). Нет способа обойти это-это жесткий предел SQL Server-Нет способа настроить его, изменить его, сделать его больше. См. Books Online-максимальный размер ключей индекса для подтверждения.
Вам нужно либо ограничить столбец "value" менее чем 900 байтами, либо найти другой способ хранения этих данных - или просто не включать их в индексе. Если вы хотите, чтобы ваше поле "value" в индексе имело покрывающий индекс (чтобы оно могло удовлетворять запросам из записи индекса), вы можете переместить это поле в столбец , включенный в индекс - они не попадают под ограничение в 900 байт.
CREATE NONCLUSTERED INDEX idx_ncl_2 ON BFPRODATTRASSOCIATION(attributeid) INCLUDE (productid, value)
Этот индекс должен работать.
Вы можете создать и проиндексировать вычисляемый столбец, который является хэшем строки. См. хэш-функции в T-SQL и интеллектуальное проектирование баз данных с использованием хэш-ключей для некоторых идей и ограничений.