1

Microsoft Accessにクエリがあり、1000レコードを返すのに約6秒かかります。

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レコードがあり、FehlerCodes_akt_Listeには約20000レコードがあります。Where and order句を削除すると、クエリはレコードを非常に高速に返します。クエリを最適化するにはどうすればよいですか?

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.CDTINNER JOINより高速なはずのに切り替えることもできます。

調べるべき他のいくつかの問題があります。

  1. 削除するとパフォーマンスに影響がありますDISTINCTROWか?
  2. CDTしたがって、、、SteuergerätおよびにインデックスがありますFehlerpfad。コンパクトな操作(統計を更新する)も実行しましたか?
  3. クエリ用に作成されたクエリプランを調べます。解釈するのは難しいかもしれませんが、おそらくそれは何か役に立つものになるでしょう。 Microsoft JetのShowPlanを使用して、より効率的なクエリを記述します
于 2012-08-02T07:55:53.147 に答える