我如何阅读查询成本,它总是一个百分比吗?

38 sql-server ssms

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

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

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

但微软 SQL 70-433 培训工具包的第 6 章第一课中对查询成本的讨论似乎与此无关。

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

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

有人可以帮忙吗?我彻底糊涂了。

Mar*_*ith 47

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

在此处输入图片说明

但现在应该被解释为整体成本的无单位度量。

执行计划是一棵树。树中的每个迭代器都给出了一个估计的 CPU 成本和一个估计的 IO 成本,并将它们相加得到总体成本(相对权重可以通过几个未记录的 DBCC 命令进行调整)。估计的子树成本包括迭代器本身及其所有后代的成本。要查看所用成本计算公式的示例,您可以查看本文

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

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

您应该知道,即使在实际执行计划中,这个成本数字也是基于估计的,如果估计不准确,使用它来比较两个不同查询的相对优点可能会严重错误。

  • 我一直想知道度量单位,很高兴终于找到了。我一直在向人们解释它(滑稽地)它是“SQL Dollars”。如果查询成本是 1.0,那就像花 1 美元买一杯咖啡一样。不错的价格。你愿意花 300 美元买一杯吗?没门! (4认同)