比较SQL查询的两个变体以获得性能的最佳方法是什么?

时间:2011-03-21 21:07:45

标签: sql-server performance tsql

我在虚拟环境下运行了一个SQL 2005数据库。

为简化起见,假设我有两个SQL SELECT查询。他们都做了完全相同的事情。但我正在尝试分析它们以达到性能目的。

通常,我会启动一个本地数据库,加载一些数据并使用时序将一个变量与其他变量进行比较。

但是在这种情况下,由于数据库很大并且它是一个测试框,客户端也将它放在一个服务于其他虚拟机的主机上。

数据库太大而无法在本地拉下来,所以这样做(至少目前为止)。

但我的主要问题是,当我对服务器运行查询时,时间到处都是。我可以运行+ exact +相同的查询4次,得到7秒,8分钟,3:45分钟和15分钟的时间。

我的第一个想法是使用SET STATISTICS IO ON。

但是,基本上会在查询表上产生读取和写入统计信息,这取决于查询中的变化(临时表,vs视图,vs连接等)无法真正准确地进行比较,除了聚合

然后我虽然使用了SET STATISTICS TIME ON,并且只使用了CPU时间,但这似乎折扣了所有的IO,这也没有提供良好的基线。

我的问题是,在这种情况下,还有其他任何统计或性能分析技术可用吗?

1 个答案:

答案 0 :(得分:1)

STATISTICS IO信息仍然有用。您可能会看到显着不同的读取,写入和扫描次数,这使得哪种查询更好。

您还可以查看每个查询的执行计划信息。您可以选择查询 - >显示“估计执行计划”以查看运行查询的SQL Server估计的图形表示。您还可以使用查询 - >包括实际执行计划以显示实际使用的计划。

而且,您还可以使用SET SHOWPLAN_TEXTSET SHOWPLAN_ALLSET SHOWPLAN_XML来包含执行计划,以查看计划的文本显示。

查看执行计划的结果时,您可以查看估算的成本值并比较每个查询的值。估计成本是一个相对值,可用于比较每个选项的成本。