2013-02-14 164 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