如何阅读查询成本,它始终是百分比吗?


34

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

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

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

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

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

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

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


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

Answers:


43

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

在此处输入图片说明

但现在应解释为对总成本的无单位衡量。

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

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

当运行多个查询时(无论是否在同一批中),通过将所有这些值加起来并按预期计算百分比来计算百分比。

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


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

4
我一直想知道度量单位,很高兴终于找到答案。我一直在向人们解释(通常是)“ SQL Dollars”。如果查询成本为1.0,则相当于为一杯咖啡支付1美元。不错的价格。您愿意为一杯咖啡支付300美元吗?没门!
datagod 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.