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 子句中使用的字段上添加索引通常会提高性能。请注意,tb_Bauteile.Blatt_nr此处的索引会提高性能,因为您的 LIKE 子句只有一个尾随通配符。但是,如果您的 LIKE 子句是,LIKE '*5'那么性能将不会得到改善。

于 2012-04-13T10:48:52.637 回答