2012-08-08 192 views
0

我正在使用Microsoft Access 2003.我的項目中的一個表單需要很長時間纔會顯示給用戶。查詢花費很長時間DISTINCT

這是適用的查詢:

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)以改善性能?

+0

嘗試通過組代替,並告訴我,請 – levi 2012-08-08 07:01:29

+1

哪裏有重複的記錄來自的結果呢?它們存在於主表中(tb_KonzeptDaten)還是由於連接? – Fionnuala 2012-08-08 07:43:59

+0

@Remou我不是sur,如果我正確地得到了你的問題,但是如果我刪除了兩列(DFCC,Konzept_obd)的** Distinct **值在結果中重複,它們都來自** tb_KonzeptDaten **表,與** DISTINCT **我沒有看到這兩個列中的任何值 – Kabi 2012-08-08 08:11:41

回答

1

我會建議獲得不同的ID,然後在列查詢中獲取您想要的列。

像這樣

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

獨特的使用本質上是做一個group by所以你只能得到「獨特的」記錄。如果你沒有任何重複的記錄,那麼這是不需要的。

我會把我的重點放在你的連接上,而不是distinct子句。

+0

我有重複的記錄,即與**區別**此查詢返回我ca 3000記錄,但沒有**獨特** ca 15000.我已將**左連接**更改爲** INNER JOIN **,性能有所提高,但只有一秒。你有更好的主意嗎? – Kabi 2012-08-08 07:05:21