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
вы должны прыгать через некоторые незначительные обручи с настройкой его против простого индекса, но это не должно быть очень сложно.