我有一个错误的统计数据和零散索引数据库上的一个复杂的查询。我感到困惑的是,当我检查一个实际的查询计划时,我从一个具有23 K行的表的表扫描得到54 M行。查询计划的更深层次在于本表与其自身相结合(23 K中只有260 K行)。这怎么可能?表扫描如何返回比表中的行更多的行?
运行一些其他查询或重建索引和统计数据使得这消失,我只是想了解为什么会发生这种情况。
我已经使用SQL 2005和SQL 2008 R2对同一数据库进行了还原。
更新:是的,这是一个实际的计划。行数是20039(不是上面提到的23 K)。这是最右边的节点之一。
嗯......表格被多次扫描? – 2011-05-26 19:44:06
由于很好的理由,该表在查询中自加入。在查询计划中,它会被扫描两次(上面提到的表扫描),并且还会在表格中进行三次索引查找。 – PavelR 2011-05-26 19:51:09
这是估计的执行计划,还是实际执行计划? – Ryk 2011-05-26 23:14:31