Сканирование SqlProfiler запущено плохо? - PullRequest
2 голосов
/ 13 марта 2010

Если в SqlProfiler вы видите, что для выполнения запроса запускается сканирование, это означает полное сканирование таблицы или это просто поиск? Если это может быть и то, и другое, как вы можете определить, какой из этих двух?

1 Ответ

4 голосов
/ 13 марта 2010

Из документации :

Класс событий Scan: Started возникает при запуске сканирования таблицы или индекса.

Так что это может быть либо один. Поле IndexID сообщит вам, является ли это индекс, и какой именно.

Не то чтобы это действительно очень важно. Сканирование кластеризованного индекса в основном - это сканирование таблицы. Некластерное индексное сканирование лучше, но только немного. Если вы видите какое-либо полное сканирование, это означает, что (а) вы используете невысказываемые предикаты или предикаты для полей, которые не проиндексированы, или (б) поля предикатов проиндексированы, но выходные столбцы не покрываются индекс, и оптимизатор решил, что выполнить полное сканирование дешевле, чем поиск по закладке / RID.

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

...