Sql server 使用Leftouter联接的索引sql server 2005中始终存在索引扫描

Sql server 使用Leftouter联接的索引sql server 2005中始终存在索引扫描,sql-server,tsql,indexing,left-join,Sql Server,Tsql,Indexing,Left Join,我用查询连接了几个表,最后一个表用左键连接 参加最后一桌 有超过百万行,并且执行计划在其上显示表扫描。我有 索引列 在其上进行连接。它总是使用索引扫描,但如果我用内部连接替换左连接,则使用索引搜索 使用和执行 只需几秒钟,但使用LEFT JOIN时会进行表扫描,因此 执行 需要几分钟。使用外部联接是否会关闭索引?想念我 某物 这种行为的原因是什么? 这是一个问题 其中S.SubjectID=15 “主题”表中的主题上有聚类索引。在其他表中,questionID上有非聚类索引 解决方案: 我以另一

我用查询连接了几个表,最后一个表用左键连接 参加最后一桌 有超过百万行,并且执行计划在其上显示表扫描。我有 索引列 在其上进行连接。它总是使用索引扫描,但如果我用内部连接替换左连接,则使用索引搜索 使用和执行 只需几秒钟,但使用LEFT JOIN时会进行表扫描,因此 执行 需要几分钟。使用外部联接是否会关闭索引?想念我 某物 这种行为的原因是什么? 这是一个问题 其中S.SubjectID=15 “主题”表中的主题上有聚类索引。在其他表中,questionID上有非聚类索引

解决方案: 我以另一种方式尝试了它,现在我正在单元格表上寻找索引。以下是修改后的查询: 其中S.SubjectID=15


通过这种方式,我在细胞表上实现了高选择性。:)

我只是尝试模拟相同的问题,但是没有表扫描,而是使用单元格的聚集索引,同时您可以尝试强制索引,您可以检查语法以及强制索引时可能遇到的问题。希望这有帮助。

您能给我们看一下查询、表和索引定义吗?您使用的是哪个版本的sql server?您好,我已经编辑了这个问题,请看一下。Thanks@user999896-请也显示您的表定义。主题:主题上的群集索引。。。。。对于QuestionKey上的问题簇索引和QuestionID上的非簇索引…对于“答案”表,AnswerKey上的簇索引和QuestionID上的非簇索引…对于CellKey上的“单元格”表,CellKey上的簇索引和QuestionIDHi JNK上的非簇索引,我得到了主题和所有其他表(单元格表除外)的索引搜索,因为正如您在where子句中看到的,我使用的是SubjectID,它使用索引see为我提供了过滤值,我只对单元格表有问题。因为在单元格表上有索引扫描 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
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