Индекс SQL Server на VarChar (50) - это полный текст? Или что? - PullRequest
0 голосов
/ 01 июня 2009

Что именно происходит, когда я создаю индекс в моей БД SQL Server 2008 для столбца VarChar. Это, очевидно, текстовый столбец.

Будет ли он автоматически индексироваться по полному тексту или он создает индекс другого типа?

Ответы [ 3 ]

6 голосов
/ 01 июня 2009

Полнотекстовые индексы отличаются от обычных индексов. Рассмотрим эти два, казалось бы, эквивалентных выражения where:

WHERE [mycolumn] LIKE '%' + @MyValue + '%'

WHERE CONTAINS([mycolumn], @MyValue)

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

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

WHERE [mycolumn] LIKE @MyValue + '%'

Нормальные индексы работают, потому что они упорядочены . Когда вы переходите к поиску значения в индексе, вы можете использовать двоичный поиск, b * -дерево или аналогичный алгоритм для более быстрого поиска или отклонения вашего соответствия, а при сравнении для объединения или диапазона сервер может «пройти» индекс для эффективной проверки ряда значений.

Полнотекстовые индексы нельзя просто упорядочить, потому что вы должны иметь возможность осуществлять поиск в середине содержимого так же быстро, как и в начале. Таким образом, они намного сложнее .

2 голосов
/ 01 июня 2009

Вот хорошая статья об основах индексации SQL Server, которую я нашел:
http://www.simple -talk.com / SQL / узнать-SQL-сервер / SQL-сервер индекс-основа /

1 голос
/ 01 июня 2009

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

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