Предупреждение! Максимальная длина ключа - 900 байт. Индекс имеет максимальную длину 1000 байт

Я передаю db script из 64-разрядной системы в 32-битную систему. Когда я выполняю script, он вызывает следующую ошибку:

Внимание! Максимальная длина ключа - 900 байт. Индекс 'UQ__Users__7E800015145C0A3F' имеет максимальную длину 1000 байт. Для некоторая комбинация больших значений, операция вставки/обновления будет потерпеть неудачу.

Результаты Google и вопросы не помогли решить эту проблему.

Ответы

Ответ 1

Для индексирования столбцов с большими размерами только индексы sqlserver столбцы размером до 900 байт.

Чтобы решить эту проблему

Во-первых: я добавил столбец hashCol для генерации hashcode типа SHA1 для MyCol

alter table myTable
    add 
    hashCol AS HASHBYTES('SHA1', CONVERT(VARCHAR(90), MyCol))

Во-вторых: я добавил уникальное ограничение для hashCol для уникальной идентификации MyCol

 ALTER  TABLE  myTable
     ADD CONSTRAINT hashCol_Unique UNIQUE (hashCol)

Таким образом, я преодолел проблему индексирования столбцов с большим размером

ссылки

Создать уникальный хэш для поля в SQL Server в sql-сервере

Ответ 2

Длина хранения типа varchar будет +2.

Решение

ALTER TABLE table_name
ALTER COLUMN column_name varchar(255)

попробуйте уменьшить длину столбца до 255 символов и попробуйте индексировать.

Ответ 4

Общая длина всех столбцов должна быть менее 900.

-- make combined colum length(to be indexed / add constrains) less <= 900
ALTER TABLE tabbleName ALTER COLUMN col1 VARCHAR (500) NULL;
ALTER TABLE tabbleName ALTER COLUMN col2 VARCHAR (200) NULL;
ALTER TABLE tabbleName ALTER COLUMN col3 VARCHAR (200) NULL;
-- Then add the index
ALTER TABLE tabbleName ADD CONSTRAINT uck UNIQUE (col1, col2, col3);