Как мне написать строковый поисковый запрос, который использует некластерную индексацию, установленную в поле? - PullRequest
0 голосов
/ 16 декабря 2008

Я собираюсь создать запрос, который будет использовать план некластеризованной индексации для поля адреса улицы, созданного с некластеризованным индексом. У меня проблема в том, что, если я ищу адрес улицы, я, скорее всего, буду использовать функцию eval «like». Я думаю, что использование этой функции приведет к сканированию таблицы вместо использования индекса. Как мне написать один в этом случае? Просто бессмысленно помещать некластеризованный индекс в поле address3? Заранее спасибо.

Ответы [ 4 ]

1 голос
/ 16 декабря 2008

Использование LIKE не обязательно будет использовать сканирование таблицы; он может использовать индекс, в зависимости от того, по какой строке вы ищете. (Например, LIKE «что-то%», как правило, может использовать индекс, тогда как LIKE «% что-то», вероятно, нет, хотя в этом случае сервер может по крайней мере выполнить сканирование индекса, что обходится дороже, чем прямой поиск индекса, но все же дешевле, чем полное сканирование таблицы. Здесь есть хорошая статья здесь , в которой говорится о LIKE и индексах в отношении SQL Server (разные СУБД будут реализовывать это по-разному, очевидно).

1 голос
/ 16 декабря 2008

поля varchar индексируются слева направо, почти так же, как индексируются словарь или энциклопедия.

Если бы вы знали, с чего начиналось поле (например, LIKE 'streetname%'), индекс был бы эффективным. Однако, если вам известна только часть поля (например, LIKE "%thing%"), индекс использовать нельзя.

1 голос
/ 16 декабря 2008

Если ваше выражение LIKE выполняет поиск в начале строки (Address LIKE 'Blah%'), я ожидаю, что индекс будет использоваться, скорее всего, через поиск по индексу.

Если вы ищете Address LIKE '%Blah%', будет выполняться сканирование таблицы / индекса в зависимости от того, сколько полей вы возвращаете в своем запросе и насколько избирательно индекс.

0 голосов
/ 16 декабря 2008

Теоретически база данных будет использовать любой индекс, который лучше. Какой сервер базы данных вы используете, чего вы на самом деле пытаетесь достичь, и как будет выглядеть ваше утверждение LIKE? Например, когда подстановочные знаки могут иметь значение для используемого плана запроса.

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

Вот некоторое обсуждение использования индексов с полями SQL Server 2005 и varchar.

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