SQL Server: общий размер индекса или первичного ключа не может превышать 900 байт. - PullRequest
6 голосов
/ 18 октября 2011

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

Ответы [ 2 ]

10 голосов
/ 19 октября 2011

Вы можете создать вычисляемый столбец для контрольной суммы 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'

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

1 голос
/ 18 октября 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...