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

简短的答案是因为有统计信息,让我们对示例数据库WideWorldImporters运行以下查询。确保已 启用执行计划。
SELECT *
FROM WideWorldImporters.Sales.OrderLines
WHERE UnitPrice = 36.00
现在让我们看一下执行计划。

从执行计划中很明显,查询运算符读取的行多于提供给它们的行。这实际上不是错误,甚至不是功能,我宁愿称其为正常行为。
原因是,原始操作符说只有21行,因为那是它从可用统计信息中收到的信息。当您将鼠标悬停在操作符上时,可以通过查看弹出信息框来快速验证这一点。

认为只有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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




