执行计划中的“查询成本”是如何工作的?

问题描述:

我想增加我的请求性能之一。 我的要求是由10个不同的选择。执行计划中的“查询成本”是如何工作的?

实际生产查询需要36秒才能执行。

如果我显示执行计划,对于一个select,我的查询成本为18%。

因此,我使用xml查询(http://www.codeproject.com/KB/database/InClauseAndSQLServer.aspx)更改了in子句(在此选择中)。

新的查询现在需要28秒才能执行,但sql服务器告诉我,上面的select具有100%的查询成本。这是我所做的唯一改变。任何查询都没有并行性。

生产: 36秒,我的选择是18%(其他是10%)。

新版本: 28秒,我的选择是100%(其他都是0%)。

你知道sql server如何计算这个“查询成本”吗? (我开始相信它是随机的或类似的东西)。

+0

不是随意的,当然;这只是你的理解,缺乏。 – duffymo

+0

谢谢你这个真正有趣的答案,你介意提高我的知识,这是我的问题的目的。 –

+0

[您可能会在我的答案中找到链接,这里有用](http://*.com/q/8688865/73226) –

查询成本是CPU周期,内存和磁盘IO组合的无单位量度。

很多时候,您会看到运营商或计划的成本更高但执行时间更快。

主要是由于上述三个组件的速度不同。 CPU和内存相当快,而且也是不常见的瓶颈。如果您可以将磁盘IO子系统的某些压力转移到CPU,则查询可能会显示较高的成本,但应该快得多。

如果你想获得您的特定查询的执行更详细的信息,您可以使用:关于CPU周期,计划创建

SET STATISTICS IO ON 
SET STATISTICS TIME ON 

这将输出的详细信息和页面读取(无论是从磁盘和内存)到消息选项卡。

+0

有什么方法可以查看成本的详细信息吗?有没有办法看到每个选择的执行时间?这个成本如何相关?这一切的目的是为了提高执行时间吗? –

+0

时间并不总是最重要的因素,尤其是在共享仓库场景中。要查看详细信息,可以使用我在答案中提到的统计选项。 – JNK