0

次のクエリがあります

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 なしで別のテーブルを作成しようとしましたが、それでも時間がかかりました。

コメントをお待ちしております

4

2 に答える 2

0

これは一般的なオラクルの例ですが、いくつかのアイデアが得られるかもしれません。Accessについてはよくわかりません、すみません。Access で利用可能な Exists としての演算子があるかどうかはわかりません。

-- Same as Distinct --
SELECT deptno, dname FROM scott.dept D WHERE EXISTS ( SELECT 'X' FROM scott.emp E WHERE E.deptno = D.deptno)
/
于 2013-02-14T19:26:59.120 に答える
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));

  )

DISTINCTで時間がかかるこの1つのクエリも確認してください

于 2013-02-14T19:19:47.293 に答える