索引与Leftouter加入在SQL Server 2005中总是有索引扫描

我有连接多个表的查询,最后一个表与LEFT JOIN连接。 最后一个表有超过百万行,执行计划显示表扫描。 我已经建立了连接的索引列。 它总是使用索引扫描,但是如果我用INNER JOIN替换LEFT JOIN,索引查找被使用并且执行需要几秒钟,但是使用LEFT JOIN进行表扫描,因此执行需要几分钟。 使用外连接关闭索引吗? 错过了我的东西? 这种行为的原因是什么? 这是查询

Select * 
FROM

     Subjects                  s
    INNER join       Question  q ON q.SubjectID   = s.SubjectID
    INNER JOIN       Answer    c ON a.QestionID   = q.QuestionID
    Left outer JOIN  Cell      c ON c.Question ID = q.QuestionID

其中S.SubjectID = 15

“Subject”表中的SubjectID上有聚簇索引。 并且在其他表中存在questionID上的非集群索引。

解决方案:我以其他方式尝试,现在我在Cell表上索引查找。 这是修改后的查询:

Select * 
FROM

     Subjects                  s
    INNER join       Question  q ON q.SubjectID   = s.SubjectID
    INNER JOIN       Answer    c ON a.QestionID   = q.QuestionID
    Left outer JOIN  Cell      c ON c.Question ID = q.QuestionID
                                              AND C.QuestionID > 0
                                              AND C.CellKey > 0

其中S.SubjectID = 15

这样我在Cell表上做了很高的选择性。 :)


我只是试图模拟相同的问题,但是没有表扫描,而是使用Cell的聚集索引,同时你可以尝试强制索引,你可以检查这里的语法和你可能遇到的问题迫使索引在这里。 希望这可以帮助。

链接地址: http://www.djcxy.com/p/44007.html

上一篇: Index with Leftouter join there is always Index scan in sql server 2005

下一篇: 11 seconds to delete 240 rows in SQL Server