Sql 使用DISTINCT的查询耗时较长
我正在使用Microsoft Access 2003。我项目中的一个表单需要很长时间才能显示给用户 这是适用的查询:Sql 使用DISTINCT的查询耗时较长,sql,sql-server,ms-access,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
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)以提高性能?DISTINCT的使用本质上是按
分组,因此只能获得“唯一”记录。如果您没有任何重复记录,则不需要这样做
我将把重点放在您的联接上,而不是distinct
子句。我建议获取distinct ID,然后在列查询中获取所需的列
像这样的
Select (select Fehlerpfad from FehlerCodes_akt_Liste where id=A.id ) as col1, ...
from
(
Select distinct ids from table
.........
) A
请尝试分组,然后告诉我结果。重复记录来自何处?它们是否存在于主表(tb_KonzeptDaten)中,或者它们是由连接引起的?@Remou如果我没有弄错您的问题,我不确定,但是如果我删除两列(DFCC,Konzept_obd)的不同值,结果是它们都来自tb_KonzeptDaten表,使用DISTINCT,我在这两列中看不到任何值当您在没有查询的情况下查看表时,是否存在重复项?哪张桌子最大?好的,从那里开始。创建一个查询从tb_KonzeptDaten中选择不同的DFCC,OBD_代码为Konzept_OBD
,保存查询并在此查询中使用该查询而不是tb_KonzeptDaten。如果它运行得更快,则可以用派生表替换查询。另外,你确定你有合适的索引吗?我有重复的记录,即使用Distinct这个查询返回我c.a 3000条记录,但没有Distinct c.a 15000条记录。我已将左连接更改为内连接,性能有所提高,但只有一秒钟。你有更好的主意吗?