【问题标题】:Query taking long time with DISTINCT使用 DISTINCT 查询需要很长时间
【发布时间】:2012-08-08 06:55:22
【问题描述】:

我使用的是 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)以提高性能?

【问题讨论】:

  • 请尝试 group by 并告诉我结果
  • 重复记录从何而来?它们是存在于主表 (tb_KonzeptDaten) 中还是由于连接?
  • @Remou 我不确定你的问题是否正确,但如果我删除 Distinct 两列(DFCC,Konzept_obd)的值重复,结果它们来自 tb_KonzeptDaten 表,带有 DISTINCT 我在这两列中看不到任何值
  • 在没有查询的情况下查看表时,是否存在重复项?哪张桌子最大?
  • 好的,从那里开始。创建查询SELECT DISTINCT DFCC, OBD_Code AS Konzept_Obd FROM tb_KonzeptDaten,保存查询并在此查询中使用该查询而不是 tb_KonzeptDaten。如果它运行得更快,您可以用派生表代替查询。另外,你确定你有合适的索引吗?

标签: sql sql-server ms-access


【解决方案1】:

我会建议获取不同的 id,然后在列查询中获取您想要的列。

类似的东西

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

【讨论】:

    【解决方案2】:

    distinct 的使用本质上是在做一个group by,所以你只能得到“唯一”的记录。如果您没有任何重复记录,则不需要这样做。

    我会将重点放在您的联接上,而不是 distinct 子句。

    【讨论】:

    • 我有重复记录,即使用 Distinct 此查询返回我 c.a 3000 条记录但没有 Distinct c.a 15000。我已经更改了我的 Left Join 变成 INNER JOIN,性能有提升但只有一秒。你有更好的主意吗?
    猜你喜欢
    • 1970-01-01
    • 2016-02-02
    • 2018-01-09
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多