2009-10-07 5 views
0

Comment puis-je comparer les performances d'un index sur une table à l'aide de l'Analyseur de requêtes?SQL Server: Comparaison des performances de l'index

Je voudrais exécuter deux fois la même requête via le plan d'exécution estimé, une fois en utilisant l'index et une fois sans, et avoir une bonne comparaison des analyses de table/index générées.

J'ai essayé de CREER INDEX ..., SELECT ..., DROP INDEX ..., SELECT. Je m'attends à ce que la première requête utilise l'index et la seconde à ne pas avoir d'index, mais les deux plans d'exécution utiliseront l'index.

Répondre

1

La technique qui a fini par fonctionner pour moi consistait à utiliser le mot clé WITH dans la clause FROM.

Lorsque l'index est créé:

SELECT * FROM table WHERE ... 

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

La première requête (probablement) utiliser l'index, le second ne sera pas. Vous pouvez également utiliser plusieurs index comme:

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

SELECT * FROM table WITH (INDEX(IX_test2)) WHERE ... 
1

Utilisez le Sql Server Profiler sous les outils de configuration. Exécutez vos requêtes avec et sans indexation et enregistrez les données lit/écrit le timing etc de vos appels de fonction. Cela devrait vous donner une idée claire si vos index ont des performances améliorées (moins de lectures/latence, etc.)

3

S'il n'y a pas d'index, alors il ne peut pas être utilisé. Cependant, l'index existe toujours pour le plan d'exécution estimé pour le 2nd select, donc il est évalué. Le plan DROP INDEX est aussi juste une estimation aussi

J'utiliserais le plan d'exécution réel de toute façon, car personnellement je n'aime pas l'estimé.

Vous pouvez utiliser SET SHOWPLAN TEXT pour capturer ce qui est réellement utilisé dans la fenêtre de requête (ou utiliser le graphique). Je voudrais aussi utiliser SET STATISTICS IO et souvent SET STATISTICS TIME aussi.

1

utilisez ceci au début de la fenêtre de requête. cela effacera toutes les caches de plan.

dbcc freeproccache 
go 
dbcc dropcleanbuffers 
go 

donc ont que en haut, puis mettez votre dreat et déposez le code d'index dans un commentaire, puis votre requête. exécutez-le initialement sans index et voyez à quoi il ressemble, puis créez l'index et relancez-le. Oui, utilisez le plan d'exécution actuel et vous pouvez également utiliser les statistiques client.

Questions connexes