2012-08-02 289 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