以下の SQL を用意しましたが、応答時間が許容範囲を超えています。
これは、RPG プログラムの DECLARE、PREPARE、OPEN、および FETCH で使用されます。ここでは、選択されたフィールドがホスト変数に配置され、配列に取り込まれ、サブファイル表示のために [降順] に並べ替えられます。
使用中の 2 つのテーブルはまったくキー付けされておらず (PF)、以下の WHERE 句に示すように結合されています。
Select DISTINCT B.Fld1, B.Fld2, B.Fld3, B.Fld4,
A.Fld1, A.Fld2, A.Fld3, A.Fld4, A.Fld5, A.Fld6, A.Fld7, A.Fld8, A.Fld9
From TableA A, TableB B
Where A.Fld2 = B.Fld5
And A.Fld1 = B.Fld6 || B.Fld7
And ((A.Fld7 BETWEEN <from-date> and <to-date>)
Or (A.Fld5 BETWEEN <from-date> and <to-date>))
これを「真の」左結合として書き直しましたが、改善はありません。
また、A.Fld2 と A.Fld1 をキーとして 2 つの利用可能な LF を使用しましたが、わずかに改善されています。
再帰的 SQL でうまくいくと思いますが、それを実現する経験がありません。各テーブルからの選択を作成し、それ自体で必要に応じて機能させます。私が望む結果を得るために、それらを 1 つの美しい獣にまとめる方法がわかりません。
この結果セットは 1 週間で約 10,000 行であり、2 週間分が必要です。
TableA には約 6,000,000 のレコードがあり、TableB には約 160,000 のレコードがあります。
今のところ、ロジックは
- 上記の前に単純な SQL を実行します。
- レコードをカーソルで移動し、配列に入力します
- 上記の SQL を実行します。
- レコードをカーソルで移動し、同じ配列に追加します
- 配列をソートし、それを使用してサブファイルにデータを取り込みます。
デバッグでは、上記の SQL が問題の本質であることを確認しました。
真実は、サブファイルを作成するために 1 つの結果テーブルに結合できると思われる 3 つのファイルがあるということです。上記のクエリを通過できる場合は、「できると思います」が他のファイルの結合を処理します。
私の推測では、「これを打ち負かす」ことができる人がそこにいると思います! 私はかつて彼と一緒に働いたことがあります!
これは RPG ではありません。システムに関する質問です。以前、RPG でこのような SQL を作成したことがあります。問題は、他の誰かが SQL を書いたことです。: (