2012-08-02 199 views
1

我在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有c.a 3000条记录和FehlerCodes_akt_Liste有c.a 20000条记录。如果我删除其中订单子句查询以非常快的速度返回记录。 如何优化我的查询?

+0

尝试在列FehlerCodes_akt_Liste.Fehlerpfad – 2012-08-02 07:48:41

+0

我有Fehlerpfad – Kabi 2012-08-02 07:49:13

+0

哪里记录来自何处添加索引的索引?本地Access后端?网络上的Access后端?别处?哪个是较小的桌子? – Fionnuala 2012-08-02 08:16:01

回答

1

你...

tb_bauteile LEFT JOIN FehlerCodes_akt_Liste 

但后来这个WHERE条款等

FehlerCodes_akt_Liste.Steuergerät = 'MEDC17' 

该约束使得LEFT JOIN毫无意义......你的结果集将只包括在这里你有行在tb_bauteile.CDTFehlerCodes_akt_Liste.CDT之间匹配。你可以切换到INNER JOIN,这应该更快。

以下是其他一些需要检查的问题。

  1. 如果您删除DISTINCTROW,您是否注意到有任何性能影响?
  2. 所以你有索引CDT,SteuergerätFehlerpfad。你是否也执行了一个紧凑的操作(更新统计数据)?
  3. 检查为您的查询创建的查询计划。解释可能会很有挑战性,但也许会变得有用。 Use Microsoft Jet's ShowPlan to write more efficient queries
+0

Thankyou Hansup为您的答案,请您详细解释点数2? – Kabi 2012-08-02 09:01:11

+0

阅读本页上标题为“定期压缩Microsoft Jet数据库”一节中的内容:http://support.microsoft.com/kb/303528 – HansUp 2012-08-02 15:42:26