SQL Server: общий размер индекса или первичного ключа не может превышать 900 байт

Я пытаюсь поместить индекс в столбец, который будет содержать URL-адреса. Поскольку максимальная длина URL-адреса превышает 2000 символов, я устанавливаю тип данных в NVARCHAR (3000). Когда я это сделал, я получил ошибку The total size of an index or primary key cannot exceed 900 bytes. Поскольку мне может потребоваться поиск записей по URL, мне понадобится индекс в столбце URL. Есть ли способ обойти это ограничение?

2 ответов


вы можете создать вычисляемый столбец для контрольной суммы URL-адреса, а затем использовать контрольную сумму в запросе. Контрольные суммы не будут уникальными, но это позволит быстро сузить количество возможных совпадений.

Сначала добавьте вычисляемый столбец в таблицу, например:

Alter Table YourTableName Add URL_HASH As CheckSum(URL)

Теперь проиндексируйте столбец следующим образом:

Create Index idx_YourTableName_URL_HASH On YourTableName(URL_HASH)

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

Select URL
From   YourTableName
Where  URL_HASH = CheckSum(N'google.com')
       And URL = 'google.com'

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


SQL Server полнотекстовый поиск-это то, что вы, вероятно, захотите.

http://msdn.microsoft.com/en-us/library/ms142571.aspx

вы должны прыгать через некоторые незначительные обручи с настройкой его против простого индекса, но это не должно быть очень сложно.