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

Dar*_*inH 5 t-sql sql-server performance

我有一个在虚拟环境下运行的SQL 2005 DB.

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

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

但在这种情况下,由于数据库很大并且它是一个测试框,因此客户端已将其放置在为其他VM提供服务的主机上.

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

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

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

但是,这基本上产量上读取和写入的表统计是查询,这取决于在查询中的变化(临时表,VS视图,VS连接,等等)不能真正精确地比较,除了在聚合.

然后,虽然SET STATISTICS TIME ON,并且只使用CPU时间,但这似乎折扣了所有IO,这也没有为良好的基线做好准备.

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

bob*_*obs 3

STATISTICS IO 信息仍然有用。您可能会看到显着不同的读取、写入和扫描数量,这将使哪个查询更好变得显而易见。

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

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

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