レコード配列定義を含む表をマップするとき、照会からの結果セットが非常に多くの行を戻すためにパフォーマンスが低下する場合があります。
配列としてマップした複数のレコード配列定義が表にあるとき、表を参照する照会は大容量の結果セットを生成します。パフォーマンス上の問題を避けるために、以下のいずれかを行います。
配列ごとに別個の表をマップする場合、フェデレーテッド照会でデータを読み取ることができます。構造を平らにした場合、クライアント・アプリケーションは行を挿入、更新、および削除することができます。
レコード配列定義を配列としてマップするとき、Classic Data Architect はデータ定義を SQL 列に変換します。配列の各インスタンスは、SQL 行を作成するために、非配列データ項目と結合されます。例えば、データベースにある従業員 ID 123456789 のレコードに 3 つの従属が含まれる場合、そのレコードに対して 3 つの個別の行が戻されます。 以下の照会は、結果セットで 3 つの行を戻します。
照会:
SELECT EMP_ID, NUMBER_OF_DEPENDENTS, DEP_ID, DEP_NAME FROM CAC.EMPL WHERE EMP_ID = '123456789';
EMP_ID NUMBER_OF_DEPENDENTS DEP_ID DEP_NAME 123456789 3 111223333 Depen1 123456789 3 222334444 Depen2 123456789 3 333445555 Depen3
結果セットのサイズの計算
WHERE 文節でフィルタリング述部を指定する前の、配列を含む表への照会で戻された結果セットの行の数を、公式を使用して計算することができます。結果セットにある行の数は、以下の項目のデカルト積です。
<Number of instances in each record array> * <Number of physical records>
各配列にインスタンスがいくつ存在しているかが分からない場合、可変長配列では結果セットにある行の数を計算することができません。
以下の例は、配列が複数あると、大きな結果セットが原因となるパフォーマンス上の問題がどのように発生する場合があるかを示しています。
照会は従業員ごとに 4 * 2 * 3 = 24 の行を生成し、結果セットには 24 * 200 = 4800 の行が生成されます。
01 EMPLOYEE-RECORD. ... 05 DEPENDENTS-ARRAY OCCURS 20 TIMES. ... 05 ORGS-ARRAY OCCURS 5 TIMES PIC X(10).
Classic Data Architect の「新しい表 (New Table)」ウィザードを使用してこのレコード・レイアウト用の表定義を作成し、両方の配列を同じ表にマップした場合、単一の従業員レコードの結果セットは DEPENDENTS-ARRAY と ORGS-ARRAY のデカルト積になります。
照会プロセッサーは、NULL の配列インスタンスを戻しません。この例では、従業員は 4 つの従属と 2 つの専門組織を持っています。照会はその従業員に 4 * 2 = 8 の行を生成します。