SQL执行计划显示“实际行数”,它大于表大小

时间:2009-06-17 11:05:36

标签: sql sql-server sql-execution-plan

我有一个相当复杂的连接的执行计划,它显示在一个表上执行索引查找,其中“实际行数”读数为~70,000,而实际上表中总共只有约600行(估计的行数仅为127)。

请注意,所有统计信息都是最新的,查询的输入参数与编译proc时输入的参数完全相同。

为什么实际行数如此之高,“实际行数”究竟是什么意思?

我唯一的理论是,大量行与嵌套循环相关,并且此索引搜索正在执行多次 - “实际行数”实际上表示所有执行的总行数。如果是这种情况,估计的行数也意味着是所有执行的总行数?

2 个答案:

答案 0 :(得分:10)

ActualRows 计算在物理运营商上调用 GetNext()的次数。

您还应该查看ActualRebinds, ActualRewinds and ActualEndOfScans以了解重新评估内循环的次数:

  

重新绑定表示一个或多个   连接的相关参数   改变了,内心必须   重新评估。 快退表示没有   相关参数的变化   并且先前的内部结果集可以是   重复使用。

答案 1 :(得分:3)

实际行数值是exec计划中该节点的所有已处理值的结果。所以是的,它考虑了嵌套循环连接。