Sql Server - указатель на поле nvarchar

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

Если поле не проиндексировано, поиск будет медленным. Я использую С#, ASP.net MVC для внешнего интерфейса.

Ответ 1

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

--*** 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

Ответ 2

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

MD5 в SQL Server

Ответ 3

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