“预计执行次数”被夸大了

时间:2016-11-07 14:39:01

标签: sql-server sql-execution-plan

我的情况是选择较慢的查询计划而不是更快的查询计划,因为我认为这是一些不正确的估计。但是,我无法弄清楚错误估计的来源。下面显示的是更快的计划,由于Index Seek估计成本为123,因此未选择。实际上,从实际和预计执行次数之间的差异可以看出,成本并不高。我的理解是执行次数是由嵌套循环顶端的行数驱动的。如您所见,估计的行数为4878,这与实际非常接近。但是底部输入的估计执行次数是61110,这是远离的。 FWIW,我已经使用全扫描更新了所有表的统计数据,并且1.22估计行是正确的(每次执行)。

61110号码来自哪里,是否有办法解决?

查询如下所示:

    SELECT
        Top.Pk
    FROM
        Top
        LEFT JOIN Bottom ON Bottom.Fk = Top.Pk
    WHERE
        Top.Date < GETUTCDATE()
        AND Bottom.Fk IS NULL

Estimated Number of Executions wrong

1 个答案:

答案 0 :(得分:3)

虽然我还没有完全理解执行计划在这里向我们展示的内容,但事实证明,通过在索引视图上指定WITH (NOEXPAND)可以修复问题的这个特定实例,从而强制优化器考虑索引视图上的索引(我认为它已经从执行计划中做了,但显然没有)。