使用DISTINCT查询需要很长时间

时间:2012-08-08 06:55:22

标签: sql sql-server ms-access

我正在使用Microsoft Access 2003.我的项目中的一个表单需要很长时间才能显示给用户。

这是适用的查询:

SELECT DISTINCT tb_KonzeptDaten.DFCC
,tb_KonzeptDaten.OBD_Code AS Konzept_Obd
,tb_bauteile.*
,FehlerCodes_akt_Liste.VAG_Code
,FehlerCodes_akt_Liste.OBD_Code
,FehlerCodes_akt_Liste.F_Klasse_EU
,FehlerCodes_akt_Liste.F_Klasse_US
,FehlerCodes_akt_Liste.CDT AS CdtNr
,FehlerCodes_akt_Liste.Pfad_Bezeichnung
,FehlerCodes_akt_Liste.Fehlerpfad AS PfadName
,FehlerCodes_akt_Liste.Fehlerunterpfad
,tb_bauteile_Tools.Tool AS Tool_
FROM (
    (
        tb_bauteile LEFT JOIN FehlerCodes_akt_Liste ON tb_bauteile.OBD2_Plaus = FehlerCodes_akt_Liste.ID
        ) LEFT JOIN tb_bauteile_Tools ON tb_bauteile.Tool = tb_bauteile_Tools.ID
    )
LEFT JOIN tb_KonzeptDaten ON FehlerCodes_akt_Liste.Fehlerpfad = tb_KonzeptDaten.DFC;

如果我删除 DISTINCT 然后运行查询,性能将得到改善 (从9秒到2秒)。另外,我也在必要的字段上放了一个索引。

如何更改查询(可能没有DISTINCT)以提高性能?

2 个答案:

答案 0 :(得分:1)

我建议获取不同的ID,然后在列查询中获取所需的列。

类似这样的事情

Select (select Fehlerpfad from FehlerCodes_akt_Liste where id=A.id ) as col1, ...
from
(
   Select distinct ids from table
   .........
) A

答案 1 :(得分:0)

使用distinct基本上是在执行group by,因此您只能获得“唯一”记录。如果您没有任何重复记录,则不需要这样做。

我会将注意力集中在您的联接上,而不是distinct子句。