Sql 查询优化

Sql 查询优化,sql,ms-access,sql-optimization,Sql,Ms Access,Sql Optimization,我在Microsoft Access中有一个查询,需要c.a.6秒才能返回1000条记录 SELECT DISTINCTROW tb_bauteile.* FROM tb_bauteile LEFT JOIN FehlerCodes_akt_Liste ON tb_bauteile.CDT = FehlerCodes_akt_Liste.CDT WHERE (( ( FehlerCodes_akt_Liste.Steuergerät ) = 'MEDC17'

我在Microsoft Access中有一个查询,需要c.a.6秒才能返回1000条记录

SELECT DISTINCTROW tb_bauteile.*
FROM   tb_bauteile
       LEFT JOIN FehlerCodes_akt_Liste
         ON tb_bauteile.CDT = FehlerCodes_akt_Liste.CDT
WHERE  (( ( FehlerCodes_akt_Liste.Steuergerät ) = 'MEDC17' ))
ORDER  BY FehlerCodes_akt_Liste.Fehlerpfad;
我把索引放在必要的字段上。 tb_bauteile拥有约3000条记录,而少数akt_Liste代码拥有约20000条记录。如果我删除Whereorder子句,查询将非常快地返回记录。 如何优化我的查询?

您已经

tb_bauteile LEFT JOIN FehlerCodes_akt_Liste
但是这个
WHERE
子句

FehlerCodes_akt_Liste.Steuergerät = 'MEDC17'
该约束使左连接无效。。。您的结果集将只包括在
tb_bauteile.CDT
FehlerCodes\u akt_Liste.CDT
之间有匹配项的行。您还可以切换到
内部联接
,这应该更快

这里还有一些其他问题需要研究

  • 如果删除
    DISTINCTROW
    ,您是否注意到任何性能影响
  • 因此,在
    CDT
    Steuergerät
    Fehlerpfad
    上都有索引。您是否也执行了压缩操作(更新统计数据)
  • 检查为查询创建的查询计划。翻译起来可能很有挑战性,但也许会发现一些有用的东西 你有

    tb_bauteile LEFT JOIN FehlerCodes_akt_Liste
    
    但是这个
    WHERE
    子句

    FehlerCodes_akt_Liste.Steuergerät = 'MEDC17'
    
    该约束使左连接无效。。。您的结果集将只包括在
    tb_bauteile.CDT
    FehlerCodes\u akt_Liste.CDT
    之间有匹配项的行。您还可以切换到
    内部联接
    ,这应该更快

    这里还有一些其他问题需要研究

  • 如果删除
    DISTINCTROW
    ,您是否注意到任何性能影响
  • 因此,在
    CDT
    Steuergerät
    Fehlerpfad
    上都有索引。您是否也执行了压缩操作(更新统计数据)
  • 检查为查询创建的查询计划。翻译起来可能很有挑战性,但也许会发现一些有用的东西
    尝试在列FehlerCodes_akt_Liste上添加索引。FehlerpfadI在FehlerpfadI上有索引记录来自何处?本地访问后端?网络上的访问后端?在别处哪一个是较小的表?记录来自后端,但nicht local和我使用LANCan在本地计算机上使用副本进行测试?我强烈怀疑这是网络问题。请尝试在列FehlerCodes_akt_Liste上添加索引。FehlerpfadI在FehlerpfadI上有索引记录来自何处?本地访问后端?网络上的访问后端?在别处哪一个是较小的表?记录来自后端,但nicht local和我使用LANCan在本地计算机上使用副本进行测试?我强烈怀疑这是一个网络问题。谢谢你的回答。请你详细解释一下第2点。阅读“定期压缩你的Microsoft Jet数据库”标题下的部分在本页:谢谢Hansup的回答。请您详细解释第2点。请阅读本页“定期压缩Microsoft Jet数据库”标题下的部分: