1

値に近いという条件に基づいて列を一致させる方法。これには、複雑なクエリ/範囲比較/複数の結合条件が必要です。クエリの取得サイズが 2GB を超えました。

テーブル :

InvDetails1 / InvDetails2 / INVDL / ExpectedResult

フィールド関係:

InvDetails1.F1 = InDetails2.F3

InvDetails2.F5 = INVDL.F1

INVDL.DLID = ExpectedResult.DLID

ExpectedResult.Total - 1 <  InvDetails1.F6 < ExpectedResult.Total + 1

left(InvDetails1.F21,10) = '2013-03-07'

ExpectedResult からのレコード数が 1 のみの結果を返します。

Group by InvDetails1.F1 , count(ExpectedResult.DLID) works.

この結果から.

最終結果 :

InvDetails1.F1 , InvDetails1.F16 , ExpectedResult.DLID , ExpectedResult.NMR

ExpectedResult - has millions of rows.
InvDetails - few hundred thousands
4

1 に答える 1

2

私がそのような状況にあり、クエリが 2 GB で「壁にぶつかっている」ことがわかった場合、問題の特定の日付だけInvDetails1のレコードを分離するために、別の保存された選択クエリを作成することを試みます。次に、他のテーブルに結合するときに、テーブル全体の代わりにそのクエリを使用します。InvDetails1

left(InvDetails1.F21,10) = '2013-03-07'私の理由は、クエリ オプティマイザが条件を使用して実行計画の早い段階でレコードを除外できないInvDetails1可能性があるためです。これにより、クエリが実際に必要以上に大きくなる可能性があります (内部的に、処理中に)。別の (前提条件の) クエリに入れて日付の選択をプロセスの最初に強制すると、「メイン」クエリのサイズをより実現可能なサイズに抑えることができます。

また、クエリが非常に大きくなる状況に陥った場合は、.accdb (または .mdb) ファイルのサイズにも注意を払い、2 GB に近づきすぎないようにします私自身はそのようなことは一度もありませんでしたが、データベース ファイルが 2GB の壁に達すると厄介なエラーが発生し、回復が「困難」になる可能性があると聞いたことがあります。

于 2013-04-02T14:27:47.950 に答える