我可以让这个查询更容易吗?

时间:2012-04-13 10:39:39

标签: sql query-optimization

你是什​​么意思?我可以使这个查询更容易,并使性能更好吗?

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;

非常感谢您的意见

1 个答案:

答案 0 :(得分:1)

重新格式化,并删除所有不必要的parantheses,它实际上很容易阅读(请注意,当我写这个答案时,问题中的查询是未格式化的文本!)

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',那么性能将无法提高。