暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

为什么执行计划操作符读取的行多于可用行?

原创 Pinal Dave 2019-12-16
671

问题:为什么执行计划操作符读取的行多于可用行?

答:统计。

image.png

简短的答案是因为有统计信息,让我们对示例数据库WideWorldImporters运行以下查询。确保已 启用执行计划。

SELECT *
FROM WideWorldImporters.Sales.OrderLines
WHERE UnitPrice = 36.00

现在让我们看一下执行计划。
image.png

从执行计划中很明显,查询运算符读取的行多于提供给它们的行。这实际上不是错误,甚至不是功能,我宁愿称其为正常行为。

原因是,原始操作符说只有21行,因为那是它从可用统计信息中收到的信息。当您将鼠标悬停在操作符上时,可以通过查看弹出信息框来快速验证这一点。
image.png

认为只有21行的SQL Server统计信息可帮助查询构建执行计划,实际上可以构建执行计划。但是,在执行实际查询时,那时SQL Server引擎将遍历所有必需的数据并显示满足查询要求的所有行。总共有33行满足查询结果,并且最终结果包含所有符合条件的行。

这是当您看到估算的行与实际的行之间有很大差异时的原因之一,您在这里通常建议“ 更新统计信息 ”以对执行计划运营商获得更好的估算,但是,这并不总是解决方案。

来源:Why Execution Plan Operator Read More Rows Than Available?
https://blog.sqlauthority.com/2019/12/15/why-execution-plan-operator-read-more-rows-than-available-interview-question-of-the-week-255/

最后修改时间:2019-12-20 15:50:56
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论