索引与Leftouter加入在SQL Server 2005中总是有索引扫描
我有连接多个表的查询,最后一个表与LEFT JOIN连接。 最后一个表有超过百万行,执行计划显示表扫描。 我已经建立了连接的索引列。 它总是使用索引扫描,但是如果我用INNER JOIN替换LEFT JOIN,索引查找被使用并且执行需要几秒钟,但是使用LEFT JOIN进行表扫描,因此执行需要几分钟。 使用外连接关闭索引吗? 错过了我的东西? 这种行为的原因是什么? 这是查询
Select * FROM“Subject”表中的SubjectID上有聚簇索引。 并且在其他表中存在questionID上的非集群索引。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
解决方案:我以其他方式尝试,现在我在Cell表上索引查找。 这是修改后的查询:
Select * FROMSubjects 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