На какие операции индексы работают плохо или не используются - PullRequest
1 голос
/ 09 августа 2010

Я создаю sql запросы и прочитал в одной книге, что при использовании оператора NOT или LIKE операторы Indexes не работают. Насколько верно это утверждение. Как мы можем избежать этого, если утверждение верно. Как сделать запрос для выполнения той же работы, избегая этих операторов.

Какие еще есть области на сервере SQL, где индексы откладываются.

Ответы [ 4 ]

3 голосов
/ 09 августа 2010

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

WHERE column LIKE '%abc'
WHERE column LIKE '%abc%'

Но любой из них может использовать индекс:

WHERE column LIKE 'abc%'
WHERE column LIKE 'abc'

Откровенноиспользуйте LIKE для очень простого текстового поиска - если вам действительно нужен текстовый поиск, который работает хорошо, посмотрите на Полнотекстовый поиск (FTS).Полнотекстовый поиск имеет свои собственные индексы.

Решение действительно сводится к оптимизатору, какой индекс использовать, но к чему-то, что гарантирует, что индекс не будет использовать его для переноса значений столбцов в вызовах функций.Это, например, не будет использовать индексы:

WHERE CHARINDEX(column, 'abc') > 0
WHERE CAST(column AS DATETIME) <= '2010-01-01'

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

2 голосов
/ 09 августа 2010

Для похожих статей в этой статье: Производительность SQL - индексы и предложение LIKE

Для оператора NOT использование индексов будет зависеть от конкретного запроса.

1 голос
/ 09 августа 2010

В Query Analyzer есть опция «Показать план выполнения» (находится в раскрывающемся меню «Запрос»). Если вы включите эту опцию, то при каждом выполнении запроса в Query Analyzer вы получите план выполнения запроса. Используйте это, чтобы проанализировать эффективность вашего запроса. На основании результатов вам может понадобиться использовать другой запрос или добавить лучшие индексы. Например. Сканирование таблиц означает, что индексы не используются, поиск закладок означает, что вы должны ограничить строки или использовать закрывающий индекс. Если есть фильтр, который вы можете захотеть удалить из функции where, то любые вызовы функций сортировки могут быть медленными.

0 голосов
/ 09 августа 2010

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

вот одна статья, с которой можно начать: http://www.sql -server-performance.com / советы / t_sql_where_p2.aspx

...