SQL Server: сравните производительность индекса - PullRequest
0 голосов
/ 07 октября 2009

Как сравнить производительность индекса в таблице с помощью Query Analyzer?

Я хотел бы выполнить один и тот же запрос в Плане предполагаемого выполнения дважды, один раз с использованием индекса и один раз без него, и иметь хорошее сравнение сгенерированных таблиц сканирования / сканирования индекса.

Я пробовал СОЗДАТЬ ИНДЕКС ..., ВЫБРАТЬ ..., КАПИТЬ ИНДЕКС ..., ВЫБРАТЬ. Я ожидаю, что первый запрос будет использовать индекс, а второй не будет иметь индекса, но оба плана выполнения будут использовать индекс.

Ответы [ 4 ]

3 голосов
/ 07 октября 2009

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

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

Вы можете использовать SET SHOWPLAN TEXT , чтобы захватить то, что фактически используется в окне запроса (или использовать графическое изображение). Я бы также использовал SET STATISTICS IO и часто SET STATISTICS TIME тоже.

2 голосов
/ 07 октября 2009

Используйте Sql Server Profiler в разделе инструментов конфигурации. Выполните ваши запросы с индексированием и без него и запишите время чтения / записи данных и т. Д. Ваших вызовов функций. Это должно дать вам четкое представление об улучшении производительности ваших индексов (меньше операций чтения / задержки и т. Д.)

1 голос
/ 10 декабря 2009

Метод, который помог мне работать, заключался в использовании ключевого слова WITH в предложении FROM.

При создании индекса:

SELECT * FROM table WHERE ...

SELECT * FROM table WITH (INDEX(0)) WHERE ...

Первый запрос (вероятно) будет использовать индекс, второй - нет. Вы также можете использовать несколько индексов, таких как:

SELECT * FROM table WITH (INDEX(IX_test1)) WHERE ...

SELECT * FROM table WITH (INDEX(IX_test2)) WHERE ...
1 голос
/ 08 октября 2009

используйте это в начале окна запроса. он очистит любой кэш плана.

dbcc freeproccache
go
dbcc dropcleanbuffers
go

так что имейте это наверху, а затем поместите ваш код Dreat и Drop индекса в комментарии, а затем ваш запрос запустите его изначально без индекса и посмотрите, как он выглядит, затем создайте индекс и перезапустите его.

и да, используйте фактический план выполнения, и вы также можете использовать статистику клиента.

...