我目前正在学习SQL 70-433(Microsoft认证考试),并且对“查询成本”性能指标感到非常困惑。

根据我可以通过Google找到的任何文档,查询成本是一个百分比数字,代表其中任何一部分所占整个批次的百分比。
对于我来说,这似乎有些奇怪,因为我对特定产品的绝对价值感兴趣查询,而不是它相对于旁边出现的其他查询的优点。

但是后来我想,也许您期望做的是并排放置两个替代查询,并运行它们作为“一批”,然后成本低于50%的任何一方都是赢家。

但是,在第6章关于查询成本的讨论中,Microsoft的SQL 70-433培训工具包没有似乎与此无关。

这里是一个示例:它们显示了一个包含两个相关子查询的查询,然后通过rep对其进行改进用“外部”应用子查询。结果:“此查询的成本约为76,而第一个查询的成本是其的两倍,约为151。”
然后他们进一步改进了查询,并将成本从76降低到3.6。它们并不暗示这些数字是百分比,而它们确实暗示它们是绝对值,它们与作为独立对象的查询相关,而没有引用任何其他查询。而且无论如何,第一个查询的成本如何为151%?

在本章的后面,它们显示了一个包含三个部分的执行计划的屏幕快照。第一个显示“成本:0%”,第二个显示“成本:1%”,最后一个显示“成本:99%”,但屏幕截图下方的(本书本身的)文本“此查询的成本为0.56” 。
我猜这意味着其他成本,但我在其他地方找不到它。

有人可以帮忙吗?我很困惑。

评论

PS假设他们所指的不是执行计划中显示的百分比...我如何获得SSMS向我显示他们所引用的数字?我是否需要类似SET STATISTICS TIME ON的命令,但需要其他命令来在“消息”选项卡上显示“成本”数字?

#1 楼

查询成本在执行计划中报告为“估计的子树成本”。这是一个绝对值,例如1.5。 Conor Cunningham在SQLBits演示文稿中提到,它最初指的是在SQL Server中7天在特定Microsoft员工的计算机(“ Nick's Machine”)上执行所花费的秒数



,但现在应解释为总体成本的无单位度量。

执行计划是一棵树。树中的每个迭代器都将获得估计的CPU成本和估计的IO成本,并将它们加在一起以获得总成本(可以使用未公开的DBCC命令调整相对权重)。估计的子树成本包括迭代器本身及其所有后代的成本。要查看所用成本核算公式的示例,请查看本文。

要确定SSMS中整个查询的估计成本,请在目录左侧选择根迭代器(例如SELECT迭代器)。图形计划,然后在SSMS属性窗口中查看此指标。

运行多个查询(无论是否在同一批次中)时,百分比是通过将所有这些值加起来并计算百分比得出的。您会期望的。

您应该意识到,即使在实际的执行计划中,该成本数字也是基于估算的,并且在估算的情况下,使用该成本数字来比较两个不同查询的相对优劣可能会严重出错。不正确。

评论


谢谢,这真的很有帮助。而且一点也不明显!我想知道为什么没有更清楚地标出这个数字?

–再次生来的怪胎女孩
2011-12-13 15:56

我一直想知道度量单位,很高兴终于找到答案。我一直在向人们解释(通常是)“ SQL Dollars”。如果查询成本为1.0,则相当于为一杯咖啡支付1美元。不错的价格。您愿意为一杯咖啡支付300美元吗?没门!

– datagod
2012-09-21 13:42