0

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

我想通过 Estimated Execution Plan 运行相同的查询两次,一次使用索引,一次不使用,并对生成的表扫描/索引扫描进行很好的比较。

我尝试过创建索引...、选择...、删除索引...、选择。我希望第一个查询使用索引,第二个查询没有索引,但是两个执行计划都将使用索引。

4

4 回答 4

3

如果没有索引,则无法使用。但是,对于第二次选择的估计执行计划,该索引仍然存在,因此对其进行了评估。DROP INDEX 计划也只是一个估计

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

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

于 2009-10-07T04:16:44.497 回答
2

使用配置工具下的 Sql Server Profiler。在有和没有索引的情况下运行您的查询,并记录函数调用的数据读取/写入时间等。这应该让您清楚地了解您的索引是否提高了性能(更少的读取/延迟等)

于 2009-10-07T00:45:22.007 回答
1

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

dbcc freeproccache
go
dbcc dropcleanbuffers
go

所以把它放在顶部,然后把你的deat and drop索引代码放在评论中,然后是你的查询。最初在没有索引的情况下运行它并查看它的外观,然后创建索引并重新运行它。

是的,使用实际的执行计划,您还可以使用客户端统计信息。

于 2009-10-07T20:54:40.903 回答
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 ...
于 2009-12-10T00:46:00.483 回答