2013-02-14 295 views
0

我有以下查詢DISTINCT查詢解決方案

SELECT DISTINCT T_Med.Comp, T_Med.ItemID, T_Med.WP, T_Med.DocName, T_Med.TrfCode, 
     T_Med.CatDescr, T_Med.SubCatDescr, T_LKPWP.RuleCode, T_MedWP.RuleCode, 
     T_Med.Group 
FROM (T_Med INNER JOIN T_LKPWP ON (T_Med.DocName=T_LKPWP.SDocName) 
AND (T_Med.[WP]=T_LKPWP.WP)) 
LEFT JOIN T_MedWP ON T_LKPWP.RuleCode=T_MedWP.RuleCode 
WHERE (((T_MedWP.RuleCode) Is Null)); 

因爲DISTINCT的需要很長的時間來處理。正如我發現的那樣,即使我爲這些相關領域創建了索引,它也無助於DISTINCT。如果沒有DISTINCT相同的查詢得出的結果小於1秒

這裏T_Med有1070065條記錄,T_MedWP有366315條記錄和T_LKPWP有55條記錄

反正實現不同方式的預期結果。我試圖在沒有DISTINCT的情況下創建一個單獨的表格,即使花了很長時間。

感謝您的意見

+0

您是否檢查過查詢的執行計劃?如果是這樣,新的索引是否被實際使用? – 2013-02-14 19:22:29

+0

Hi Fred,如何獲取ms訪問執行計劃 – shabar 2013-02-14 19:31:00

+0

如果您使用的是Jet,那麼有一個JETSHOWPLAN註冊表設置,啓用時會生成一個showplan.out文件。 – 2013-02-14 20:13:17

回答

0
SELECT DISTINCT Comp, ItemID, WP, DocName, TrfCode, 
    CatDescr, SubCatDescr, RuleCode, .RuleCode, 
    Group FROM (

maybe try this... 

SELECT T_Med.Comp, T_Med.ItemID, T_Med.WP, T_Med.DocName, T_Med.TrfCode, 
    T_Med.CatDescr, T_Med.SubCatDescr, T_LKPWP.RuleCode, T_MedWP.RuleCode, 
    T_Med.Group 
    FROM (T_Med INNER JOIN T_LKPWP ON (T_Med.DocName=T_LKPWP.SDocName) 
    AND (T_Med.[WP]=T_LKPWP.WP)) 
    LEFT JOIN T_MedWP ON T_LKPWP.RuleCode=T_MedWP.RuleCode 
    WHERE (((T_MedWP.RuleCode) Is Null)); 

) 

還檢查了這一個Query taking long time with DISTINCT

+0

@喬 - 使用Ctrl + K來輸入代碼。 – Art 2013-02-14 19:28:46

+0

Thax喬,我嘗試了給定的選項。仍然找到相同的問題。只是想知道有多少記錄 如果在T_Med中有'n'個重複並且'm'在T_MedWP表中有多個重複記錄 有什麼可能的記錄我在運行查詢時應該得到什麼不同。 因爲即使我去計數()它不會放棄(運行很長時間) 我應該如何解決這個問題 – shabar 2013-02-14 23:01:25

0

這是一般甲骨文的例子,但也許它給你一些想法。我對Access的瞭解不多,對不起。無法確定操作符是否存在Access中可用。

-- Same as Distinct -- 
SELECT deptno, dname FROM scott.dept D WHERE EXISTS (SELECT 'X' FROM scott.emp E WHERE E.deptno = D.deptno) 
/
+0

謝謝藝術,你能解釋我怎麼能將你的查詢應用到我的場景。什麼代表'X' – shabar 2013-02-14 21:58:39

+0

@shabar - X是任何值。無論在子查詢中選擇什麼 - X,1或null。如果子查詢返回至少一行,則EXISTS運算符返回TRUE。只要subq中的第一行。發現它返回true,並不檢查任何進一步返回不同的值。爲了幫助您查詢,我需要表格和一些時間。我不能在腦海中碾碎這些東西。這裏的想法是告訴你避免截然不同的方法。分開查詢您的查詢,例如刪除連接,看看你需要在哪裏應用截然不同,以及如何避免這種情況...簡化,始終保持簡單。 – Art 2013-02-15 13:21:26