1

我在 Microsoft Access 中有一个查询,需要大约 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有 ca 3000 条记录,FehlerCodes_akt_Liste有 ca 20000 条记录。如果我删除Whereorder Clause,查询会非常快地返回记录。如何优化我的查询?

4

1 回答 1

1

你有 ...

tb_bauteile LEFT JOIN FehlerCodes_akt_Liste

但是这个WHERE条款...

FehlerCodes_akt_Liste.Steuergerät = 'MEDC17'

该约束LEFT JOIN没有实际意义......您的结果集将仅包含您在tb_bauteile.CDT和之间匹配的行FehlerCodes_akt_Liste.CDT。您也可以切换到INNER JOIN应该更快的。

这里还有一些其他问题需要检查。

  1. 如果删除,您是否注意到任何性能影响DISTINCTROW
  2. CDT所以你在,Steuergerät和上有索引Fehlerpfad。您是否还执行了紧凑操作(更新统计信息)?
  3. 检查为您的查询创建的查询计划。解释起来可能很有挑战性,但也许它会带来一些有用的东西。 使用 Microsoft Jet 的 ShowPlan 编写更高效的查询
于 2012-08-02T07:55:53.147 回答