2009-10-07 69 views
0

如何比较使用查询分析器的表上的索引性能?SQL Server:比较索引性能

我想通过估计执行计划两次运行相同的查询,一次使用索引,一次没有,并且对生成的表扫描/索引扫描进行比较。

我试过CREATE INDEX ...,SELECT ...,DROP INDEX ...,SELECT。我期望第一个查询使用索引,第二个查询没有索引,但两个执行计划都将使用索引。

回答

1

最终为我工作的技术是在FROM子句中使用WITH关键字。

当创建索引:

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

在配置工具下使用Sql Server Profiler。在索引和不索引的情况下运行查询,并记录函数调用的数据读/写时间等。这应该给你一个清晰的想法,如果你的索引有改进的性能(更少的读取/延迟等)

3

如果没有索引,那么它不能使用。但是,对于第二选择的预计执行计划,该指数仍然存在,因此进行评估。 DROP INDEX计划也只是一个估计

无论如何我会使用实际的执行计划,因为我个人不喜欢估计的执行计划。

您可以使用SET SHOWPLAN TEXT来捕获查询窗口中实际使用的内容(或使用图形窗口)。我也会使用SET STATISTICS IO,通常也使用SET STATISTICS TIME

1

在查询窗口的开始处使用它。它会清除任何计划缓存。

dbcc freeproccache 
go 
dbcc dropcleanbuffers 
go 

所以有在顶部,然后把你的dreat和评论删除索引代码,然后你的查询。在没有索引的情况下运行它,看看它的样子,然后创建索引并重新运行它。

是的,使用实际执行计划,你也可以使用客户端统计。