Quelques choses à faire:
1) assurer que vous comparez les performances assez en effaçant les données et le cache plan d'exécution après chaque essai. Vous pouvez effacer ces vers le bas à l'aide (RECOMMANDÉ seulement faire cela sur votre dev/environnement de test):
CHECKPOINT -- force dirty pages in the buffer to be written to disk
DBCC DROPCLEANBUFFERS -- clear the data cache
DBCC FREEPROCCACHE -- clear the execution plan cache
2) Exécuter Profiler SQL pour enregistrer la lecture/écriture/CPU/Durée pour chaque situation (avec/sans les indices). Cela vous donnera une gamme de métriques à comparer sur (c'est-à-dire par opposition à juste le temps indiqué dans SSMS). Pour exécuter une trace SQL Profiler, dans Management Studio, accédez à Outils -> SQL Server Profiler. Lorsque vous y êtes invité, spécifiez le serveur db sur lequel exécuter la trace. Une boîte de dialogue "Trace Properties" apparaîtra - vous devriez simplement pouvoir cliquer sur "Run" pour lancer une trace par défaut. Ensuite, exécutez simplement votre procédure stockée et voyez-la apparaître dans SQL Profiler - elle montrera la durée, le nombre de lectures etc.
3) Testez avec des volumes de données beaucoup plus importants que ce que vous avez déjà. Si vous testez avec de petites quantités de données, alors la différence est souvent difficile à voir sur la durée seule.
Je récemment blogged here sur la façon de tester équitablement les performances des différentes variantes d'une requête, ce qui va un peu plus en détail sur la façon dont je le fais.
Je suppose que vous utilisez SQL Server? – AdaTheDev
SQL Server 2005 – theklc