ジョイン系アクセスモデルには以下のものがあります。
ジョインキーを昇順に読み込む方法として、インデックスを利用するマージジョインのアクセスモデルです。
(1)(3)WHERE探索条件によりインデックス検索範囲を作成し、INDEX KEY SCANを行う。
(インデックスに検索範囲が生成できない場合は、INDEX ALL SCANを行う)
(2)(4)インデックスキー(ジョインキー)の昇順にレコードを取得する。
(5)ソートマージ法でジョインを行い、結合したデータをアプリケーションに返却する。
[アクセスプランの出力例]
=============================================================================== Main query =sno===sectname=====input1==============input2==============output/update====== 1 : M-JOIN [TBL1_IX1_DSO ][ ][ ] [TBL2_IX1_DSO ][ ][APPL ] ------------------------------------------------------------------------------- [ 1] MERGE JOIN ELEMENT 1) table name SCM1.TBL1 scan type INDEX KEY SCAN(1) dso name TBL1_IX1_DSO [PAGE/SH] join key column 1 condition evaluation No scan record number 100 2) table name SCM1.TBL2 scan type INDEX KEY SCAN(1) dso name TBL2_IX1_DSO [PAGE/SH] join key column 1 condition evaluation No scan record number 200 [ 2] OUTPUT ELEMENT record length 22
2) マージジョイン(インデックスを利用してジョインをして表データも取得する)
ジョインキーを昇順に読み込む方法として、インデックスを利用します。インデックスだけでは必要な列のすべてを獲得できない表に対して、ジョイン後に各表からデータを取り出すアクセスモデルです。
(1)(3)WHERE探索条件よりインデックス検索範囲を作成し、INDEX KEY SCANを行う。
(インデックスに検索範囲が生成できない場合は、INDEX ALL SCANを行う)
(2)(4)インデックスキー(ジョインキー)の昇順にレコードを取得する。
(5)ソートマージ法でジョインを行う。
(6)TBL1のTIDでソートを行う。
(7)ソートからレコードを取り出し、表をTABLE KEY SCANする。
(8)TBL2のTIDでソートを行う。
(9) ソートからレコードを取り出し、表をTABLE KEY SCANして、結果データをアプリケーションに返却する。
[アクセスプランの出力例]
=============================================================================== Main query =sno===sectname=====input1==============input2==============output/update====== 1 : M-JOIN [TBL1_IX1_DSO ][ ][ ] [TBL2_IX1_DSO ][ ][SORT0001 ] ------------------------------------------------------------------------------- [ 1] MERGE JOIN ELEMENT 1) table name SCM1.TBL1 scan type INDEX KEY SCAN(1) dso name TBL1_IX1_DSO [PAGE/SH] join key column 2 condition evaluation No scan record number 100 2) table name SCM1.TBL2 scan type INDEX KEY SCAN(1) dso name TBL2_IX1_DSO [PAGE/SH] join key column 2 condition evaluation No scan record number 200 [ 2] INSERT ELEMENT table name SORT0001 insert record length 24 ------------------------------------------------------------------------------- 2 : SCAN [SORT0001 ][TBL1_BASE_DSO ][SORT0002 ] ------------------------------------------------------------------------------- [ 1] SCAN ELEMENT table name SORT0001 scan type TABLE ALL SCAN condition evaluation No [ 2] SCAN ELEMENT table name SCM1.TBL1 scan type TABLE KEY SCAN dso name TBL1_BASE_DSO [PAGE/SH] condition evaluation Yes scan record number 1 [ 3] INSERT ELEMENT table name SORT0002 insert record length 88 ------------------------------------------------------------------------------- 3 : SCAN [SORT0002 ][TBL2_BASE_DSO ][APPL ] ------------------------------------------------------------------------------- [ 1] SCAN ELEMENT table name SORT0002 scan type TABLE ALL SCAN condition evaluation No [ 2] SCAN ELEMENT table name SCM1.TBL2 scan type TABLE KEY SCAN dso name TBL2_BASE_DSO [PAGE/SH] condition evaluation No scan record number 1 [ 3] OUTPUT ELEMENT record length 182
3) マージジョイン(ソートテーブルを利用してジョインする)
ジョインするいくつかの表を制約アクセスモデルを利用して結果を求めておき、その結果をジョインキーでソートしてからマージジョインを行うアクセスモデルです。
(1) 制約アクセスモデルを利用して得られたレコードをソートテーブルにINSERTする。
(2) 検索範囲を生成できないのでINDEX ALL SCANを行う。
(3)(4)ソートテーブルとインデックスからジョインキーの昇順にレコードを取り出す。
(5) ソートマージ法でジョインを行う。
(6) TBL2のTIDでソートを行う。
(7) ソートからレコードを取り出し、表をTABLE KEY SCANして、結果データをアプリケーションに返却する。
[アクセスプランの出力例]
=============================================================================== Main query =sno===sectname=====input1==============input2==============output/update====== 1 : SCAN [TBL1_IX1_DSO ][ ][SORT0002 ] ------------------------------------------------------------------------------- [ 1] SCAN ELEMENT table name SCM1.TBL1 scan type INDEX KEY SCAN(1) dso name TBL1_IX1_DSO [PAGE/SH] condition evaluation No scan record number 100 [ 2] INSERT ELEMENT table name SORT0002 insert record length 12 ------------------------------------------------------------------------------- 2 : SCAN [SORT0002 ][TBL1_BASE_DSO ][SORT0001 ] ------------------------------------------------------------------------------- [ 1] SCAN ELEMENT table name SORT0002 scan type TABLE ALL SCAN condition evaluation No [ 2] SCAN ELEMENT table name SCM1.TBL1 scan type TABLE KEY SCAN dso name TBL1_BASE_DSO [PAGE/SH] condition evaluation No scan record number 1 [ 3] INSERT ELEMENT table name SORT0001 insert record length 88 ------------------------------------------------------------------------------- 3 : M-JOIN [SORT0001 ][ ][ ] [TBL2_IX1_DSO ][ ][SORT0003 ] ------------------------------------------------------------------------------- [ 1] MERGE JOIN ELEMENT 1) table name SORT0001 scan type TABLE ALL SCAN join key column 1 condition evaluation No 2) table name SCM1.TBL2 scan type INDEX ALL SCAN dso name TBL2_IX1_DSO [DSI/SH] join key column 1 condition evaluation No scan record number 1000 [ 2] INSERT ELEMENT table name SORT0003 insert record length 100 ------------------------------------------------------------------------------- 4 : SCAN [SORT0003 ][TBL2_BASE_DSO ][APPL ] ------------------------------------------------------------------------------- [ 1] SCAN ELEMENT table name SORT0003 scan type TABLE ALL SCAN condition evaluation No [ 2] SCAN ELEMENT table name SCM1.TBL2 scan type TABLE KEY SCAN dso name TBL2_BASE_DSO [PAGE/SH] condition evaluation No scan record number 1 [ 3] OUTPUT ELEMENT record length 182
4) フェッチジョイン(インデックスを利用してジョインする)
制約アクセスモデルにより読み込んだデータを元に、結合する表のインデックスをキー値検索してジョインを行うアクセスモデルです。
(1) 制約アクセスモデルを利用して得られたレコードを取り出す。
(2) インデックスの検索範囲を作成し、INDEX TABLE SCANを行う。
(3) 結果データをアプリケーションに返却する。
[アクセスプランの出力例]
=============================================================================== Main query =sno===sectname=====input1==============input2==============output/update====== 1 : SCAN [TBL1_IX1_DSO ][ ][SORT0001 ] ------------------------------------------------------------------------------- [ 1] SCAN ELEMENT table name SCM1.TBL1 scan type INDEX KEY SCAN(1) dso name TBL1_IX1_DSO [PAGE/SH] condition evaluation No scan record number 5 [ 2] INSERT ELEMENT table name SORT0001 insert record length 12 ------------------------------------------------------------------------------- 2 : SCAN [SORT0001 ][ ][ ] F-JOIN [TBL1_BASE_DSO ][ ][ ] [TBL2_IX1_DSO ][TBL2_BASE_DSO ][APPL ] ------------------------------------------------------------------------------- [ 1] SCAN ELEMENT table name SORT0001 scan type TABLE ALL SCAN condition evaluation No [ 2] FETCH JOIN ELEMENT 1) table name SCM1.TBL1 scan type TABLE KEY SCAN dso name TBL1_BASE_DSO [PAGE/SH] condition evaluation No scan record number 1 2) table name SCM1.TBL2 scan type INDEX TABLE SCAN(1) dso name TBL2_IX1_DSO [PAGE/SH] TBL2_BASE_DSO [PAGE/SH] condition evaluation No scan record number 3 [ 3] OUTPUT ELEMENT record length 182
5) フェッチジョイン(クラスタキーを利用してジョインする)
制約アクセスモデルにより読み込んだデータを元に、結合する表をクラスタキーで検索してジョインを行うアクセスモデルです。
(1) 制約アクセスモデルを利用して得られたレコードを取り出す。
(2) クラスタキー値を作成し、TBL2に対してTABLE KEY SCANを行う。
(3) 結果データをアプリケーションに返却する。
[アクセスプランの出力例]
=============================================================================== Main query =sno===sectname=====input1==============input2==============output/update====== 1 : F-JOIN [TBL1_IX1_DSO ][TBL1_BASE_DSO ][ ] [TBL2_BASE_DSO ][ ][APPL ] ------------------------------------------------------------------------------- [ 1] FETCH JOIN ELEMENT 1) table name SCM1.TBL1 scan type INDEX TABLE SCAN(1) dso name TBL1_IX1_DSO [PAGE/SH] TBL1_BASE_DSO [PAGE/SH] condition evaluation No scan record number 1 2) table name SCM1.TBL2 scan type TABLE KEY SCAN dso name TBL2_BASE_DSO [PAGE/SH] condition evaluation No scan record number 1 [ 2] OUTPUT ELEMENT record length 182
制約アクセスモデルにより読み込んだデータごとに、結合する表を直接読み込みながらジョインを行うアクセスモデルです。
注意
本アクセスモデルは、ASSIST指定のLEADING_TABLEと、FETCHを指定したJOIN_RULEを同時に指定し、結合される側の表のインデックスやクラスタキーが使えない場合に有効になります。
(1) 制約アクセスモデルを利用して得られたレコードを取り出す。
(2) TBL2についてTABLE ALL SCANを行う。
(3) 結果データをアプリケーションに返却する。
[アクセスプランの出力例]
=============================================================================== Main query =sno===sectname=====input1==============input2==============output/update====== 1 : SCAN [TBL1_IX1_DSO ][ ][SORT0001 ] ------------------------------------------------------------------------------- [ 1] SCAN ELEMENT table name SCM1.TBL1 scan type INDEX KEY SCAN(1) dso name TBL1_IX1_DSO [PAGE/SH] condition evaluation No scan record number 5 [ 2] INSERT ELEMENT table name SORT0001 insert record length 12 ------------------------------------------------------------------------------- 2 : SCAN [SORT0001 ][ ][ ] F-JOIN [TBL1_BASE_DSO ][ ][ ] [TBL2_BASE_DSO ][ ][APPL ] ------------------------------------------------------------------------------- [ 1] SCAN ELEMENT table name SORT0001 scan type TABLE ALL SCAN condition evaluation No [ 2] FETCH JOIN ELEMENT 1) table name SCM1.TBL1 scan type TABLE ALL SCAN dso name TBL1_BASE_DSO [DSI/SH] condition evaluation Yes scan record number 1 2) table name SCM1.TBL2 scan type TABLE ALL SCAN dso name TBL2_BASE_DSO [DSI/SH] condition evaluation Yes scan record number 1 [ 2] OUTPUT ELEMENT record length 182
7) ネスティドループジョイン(実表を直接読み込んでジョインする)
データベースの表を直接読み込みながら、レコードの組合わせを作成するアクセスモデルです。
(1) TBL1についてTABLE ALL SCANを行う。
(2) (1)のレコードごとに、TBL2についてTABLE ALL SCANを行う。
(3) 結果データをアプリケーションに返却する。
[アクセスプランの出力例]
=============================================================================== Main query =sno===sectname=====input1==============input2==============output/update====== 1 : N-JOIN [TBL1_BASE_DSO ][ ][ ] [TBL2_BASE_DSO ][ ][APPL ] ------------------------------------------------------------------------------- [ 1] NESTED LOOP JOIN ELEMENT 1) table name SCM1.TBL1 scan type TABLE ALL SCAN dso name TBL1_BASE_DSO [DSI/SH] condition evaluation Yes scan record number 1 2) table name SCM1.TBL2 scan type TABLE ALL SCAN dso name TBL2_BASE_DSO [DSI/SH] condition evaluation Yes scan record number 1 [ 2] OUTPUT ELEMENT record length 182
8) ネスティドループジョイン(ワークテーブルを利用してジョインする)
制約アクセスモデルまたはジョイン系アクセスモデルの結果データをワークテーブルに格納し、そのワークテーブルを読み込みながらレコードの組合わせを作成するアクセスモデルです。
参考
以下の例では、ジョインする表が1)WORK0001、2)SCM1.TBL2と並んでいますが、1)SCM1.TBL2、2)WORK0001のように、ジョインする表の順序が入れ替わることもあります。
(1) 制約アクセスモデルを利用して得られたレコードをワークテーブルにINSERTする。
(2) ワークテーブルからレコードを取り出しながらレコードごとにTBL2をTABLE ALL SCANする。
(3) 結果データをアプリケーションに返却する。
[アクセスプランの出力例]
=============================================================================== Main query =sno===sectname=====input1==============input2==============output/update====== 1 : SCAN [TBL1_IX1_DSO ][TBL1_BASE_DSO ][WORK0001 ] ------------------------------------------------------------------------------- [ 1] SCAN ELEMENT table name SCM1.TBL1 scan type INDEX TABLE SCAN(1) dso name TBL1_IX1_DSO [PAGE/SH] TBL1_BASE_DSO [PAGE/SH] condition evaluation No scan record number 1 [ 2] INSERT ELEMENT table name WORK0001 insert record length 4 ------------------------------------------------------------------------------- 2 : N-JOIN [WORK0001 ][ ][ ] [TBL2_BASE_DSO ][ ][APPL ] ------------------------------------------------------------------------------- [ 1] NESTED LOOP JOIN ELEMENT 1) table name WORK0001 scan type TABLE ALL SCAN condition evaluation No 2) table name SCM1.TBL2 scan type TABLE ALL SCAN dso name TBL2_BASE_DSO [DSI/SH] condition evaluation Yes scan record number 50 [ 2] OUTPUT ELEMENT record length 4
参考
ワークテーブルだけを利用してネスティドループジョインを行うアクセスモデルもあります。
この場合は、上記例におけるTBL2を制約アクセスモデルを利用してワークテーブルに格納して、ワークテーブルを読み込みながらネスティドループジョインすると考えてください。