0

このクエリを高速化するための提案を探しています。Access 2007. 内部クエリには数分かかり、完全なクエリには非常に時間がかかります (40 ~ 80 分)。結果は予想通り。すべてが索引付けされています。

SELECT qtdetails.F5, qtdetails.F16, ExpectedResult.DLID, ExpectedResult.NumRows
FROM qtdetails 
INNER JOIN (INVDL 
            INNER JOIN ExpectedResult 
                    ON INVDL.DLID = ExpectedResult.DLID) 
        ON (qtdetails.F1 = INVDL.RegionCode) 
           AND (qtdetails.RoundTotal = ExpectedResult.RoundTotal)
WHERE 
      (qtdetails.F5 IN (SELECT qtdetails.F5 
                            FROM (ExpectedResult 
                                  INNER JOIN INVDL 
                                          ON ExpectedResult.DLID = INVDL.DLID)
                            INNER JOIN qtdetails 
                                    ON (INVDL.RegionCode = qtdetails.F1) 
                                       AND (ExpectedResult.RoundTotal = qtdetails.RoundTotal)

                            GROUP BY qtdetails.F5 
                            HAVING (((COUNT(ExpectedResult.DLID)) < 2));
                            )
          );

INVDL - 80,000 レコード

ExpectedResult - 1000 万レコード

qtDetails - 12,000 レコード

内部クエリは、約 5000 ~ 8000 レコードになります。内部クエリの結果をテーブルに保存しようとしました。代わりに、qTempTable から Select F5 を使用します。しかし、まだ多くの時間がかかります。

どんな助けでも非常に高く評価されます。

データ・タイプ :

qtdetails.F5 = Number
qtdetails.F16 = Text
ExpectedResult.NumRows = Number
INVDL.DLID = Number
ExpectedResult.DLID = Number
INVDL.RegionCode = Text
qtdetails.F1 = Text
4

1 に答える 1

0

クエリに関係するすべてのテーブルでインデックスを再構築します。クエリを再度実行し、時間を確認します。実行時間が短縮されます。可能であれば、調整されたクエリですぐに更新します。

クエリを続けてください!

于 2013-04-23T07:14:00.683 に答える