SQL-сервер - индекса на nvarchar поле

каков хороший подход, чтобы сохранить поле nvarchar уникальным. У меня есть поле, в котором хранятся URL-адреса mp3-файлов. Длина url-адреса может быть от 10 символов до 4000. Я попытался создать индекс, и он говорит, что не может создать индекс, поскольку общая длина превышает 900 байт.

Если поле не индексируется, его будет медленно искать что-либо. Я использую c#, asp.net mvc для передней части.

в отношении

Paraminder

3 ответов


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

--*** Add extra column to your table that will hold checksum
ALTER TABLE Production.Product
ADD cs_Pname AS CHECKSUM(Name);
GO

--*** Create index on new column
CREATE INDEX Pname_index ON Production.Product (cs_Pname);
GO

затем вы можете быстро получить данные, используя следующий запрос:

SELECT * 
FROM Production.Product
WHERE CHECKSUM(N'Bearing Ball') = cs_Pname
AND Name = N'Bearing Ball';

вот документация:http://technet.microsoft.com/en-us/library/ms189788.aspx


вы можете использовать хэш-функцию (хотя теоретически это не гарантирует, что два разных названия будут иметь разные хэши, но должны быть достаточно хороши:MD5 в столкновениях), а затем примените индекс к этому столбцу.

MD5 в SQL Server


вы можете создать хэш-код url и использовать это целое число в качестве уникального индекса в вашей БД. Остерегайтесь преобразования всех символов в нижний регистр, чтобы убедиться, что все url-адреса находятся в одном формате. Тот же url-адрес будет генерировать равный хэш-код.