Sql server 比较SQL查询的两种变体的性能的最佳方法是什么?

Sql server 比较SQL查询的两种变体的性能的最佳方法是什么?,sql-server,performance,tsql,Sql Server,Performance,Tsql,我有一个SQL2005DB在虚拟环境下运行 为了简化事情,假设我有两个SQL SELECT查询。他们都做完全相同的事情。但我正试图分析它们以达到性能目的 通常,我会启动一个本地数据库,加载一些数据,并使用计时来比较一个变量和其他变量 但在这种情况下,由于数据库很大,而且是一个测试箱,所以客户机将其放置在一个主机上,该主机也为其他VM提供服务 数据库太大,无法在本地下拉,因此这是错误的(至少目前如此) 但是,我的主要问题是,当我对服务器运行查询时,时间总是很紧迫。我可以运行+精确+相同的查询4次,

我有一个SQL2005DB在虚拟环境下运行

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

通常,我会启动一个本地数据库,加载一些数据,并使用计时来比较一个变量和其他变量

但在这种情况下,由于数据库很大,而且是一个测试箱,所以客户机将其放置在一个主机上,该主机也为其他VM提供服务

数据库太大,无法在本地下拉,因此这是错误的(至少目前如此)

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

我的第一个想法是使用设置统计IO

但是,这基本上会产生作为查询的表的读写统计数据,这取决于查询中的变化(临时表、vs视图、vs连接等),除了在聚合中,不能真正准确地进行比较

然后,我想设置统计时间,只使用CPU时间,但这似乎打折了所有IO,这也不适合作为一个好的基线


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

统计IO信息仍然有用。您可能会看到显著不同的读取、写入和扫描次数,从而可以清楚地看出哪个查询更好

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

此外,您还可以使用
SET SHOWPLAN_TEXT
SET SHOWPLAN_ALL
SET SHOWPLAN_XML
包含执行计划以查看计划的文本显示


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

作为一个非常简单的比较,您可以使用show execution plan在同一批中运行这两个选项,并查看哪一个占总百分比的比例最大。@adrian execution plan只是一个指南。当实际执行时,估计的子树成本A与B往往是错误的out@Richard:即使在使用实际执行计划时也是如此吗?@adrian-实际时间也可能会产生误导。一个好的比较会考虑执行计划和IO/cpu统计数据,因此,看看当数据/标准发生变化时,每个数据/标准会发生什么变化。@adrian-实际计划中的子树成本直接从估计的计划中提取出来。未对其进行调整,以纠正估算中的任何基数错误等。在某些特殊情况下,这可能导致较差计划的成本为0%,而良好计划的成本为100%。例如,我曾经使用过图形计划,但是比较它们,特别是当我比较的查询明显不同时,似乎是将苹果与桔子进行比较,而且当这些图形计划变得相当大时,比较它们是很困难的。看看ShowPlan_文本,这可能会更好一些。我以前没玩过这个。我还将更多地了解该估计成本价值。谢谢我将给Bobs一个公认的答案,但我仍然希望有一个更直接的方法。不过,在一天结束时,我正努力在我的机器上安装一个TB或2TB的驱动器,这样我就可以在本地进行测试并完成它。