0

どう言う意味ですか?このクエリを簡単にし、パフォーマンスを向上させることはできますか?

SELECT DISTINCT tb_Bauteile.ID,
                tb_Bauteile.Name,
                tb_Bauteile.Blatt_nr,
                FehlerCodes_akt_Liste.Fehlerpfad,
                FehlerCodes_akt_Liste.Pfad_Bezeichnung,
                FehlerCodes_akt_Liste.Steuergerät,
                FehlerCodes_akt_Liste.Kommentar
  FROM ((tb_Pinnummern INNER JOIN tb_Bauteile ON
        tb_Pinnummern.Bauteil = tb_Bauteile.ID) INNER JOIN tb_Fahrzeug ON
        tb_Pinnummern.SG = tb_Fahrzeug.Motor_SG)
 INNER JOIN FehlerCodes_akt_Liste
    ON tb_Bauteile.CDT = FehlerCodes_akt_Liste.CDT
 WHERE (((tb_Bauteile.Blatt_nr) LIKE "5*") AND
       ((tb_Fahrzeug.ID) = forms ! frm_fahrzeug ! id))
 ORDER BY FehlerCodes_akt_Liste.Fehlerpfad;

ご意見ありがとうございます

4

1 に答える 1

1

再フォーマットして、不要なプレーンテキストをすべて削除すると、実際には非常に読みやすくなります(この回答を書いたとき、質問のクエリはフォーマットされていないテキストでした!)

SELECT DISTINCT 
    tb_Bauteile.ID, tb_Bauteile.Name, tb_Bauteile.Blatt_nr,   
    FehlerCodes_akt_Liste.Fehlerpfad, FehlerCodes_akt_Liste.Pfad_Bezeichnung,
    FehlerCodes_akt_Liste.Steuergerät, FehlerCodes_akt_Liste.Kommentar
FROM 
      tb_Pinnummern INNER JOIN 
      tb_Bauteile 
      ON tb_Pinnummern.Bauteil = tb_Bauteile.ID INNER JOIN 
           tb_Fahrzeug 
           ON tb_Pinnummern.SG = tb_Fahrzeug.Motor_SG INNER JOIN 
               FehlerCodes_akt_Liste 
               ON tb_Bauteile.CDT = FehlerCodes_akt_Liste.CDT 
WHERE tb_Bauteile.Blatt_nr Like "5*" 
AND   tb_Fahrzeug.ID = [forms]![frm_fahrzeug]![id] 
ORDER BY FehlerCodes_akt_Liste.Fehlerpfad;

テーブル名にエイリアスを付けて、テーブル名を簡単にすることもできます。

SELECT DISTINCT b.ID, b.Name
FROM tb_Bauteile AS b
WHERE b.Blatt_nr LIKE "5*"

Join句とWhere句で使用されるフィールドにインデックスを追加すると、通常、パフォーマンスが向上します。LIKE句には末尾のワイルドカードしかないため、ここでインデックスをtb_Bauteile.Blatt_nr付けるとパフォーマンスが向上することに注意してください。ただし、LIKE句がその場合LIKE '*5'、パフォーマンスは向上しません。

于 2012-04-13T10:48:52.637 に答える