ページの先頭行へ戻る
Symfoware Server V10.0.0 アプリケーション開発ガイド(共通編)

H.1.2 ジョイン系アクセスモデル

ジョイン系アクセスモデルには以下のものがあります。

アクセスモデル名

種類

マージジョイン

1) マージジョイン(インデックスを利用してジョインする)
2) マージジョイン(インデックスを利用してジョインをして表データも取得する)
3) マージジョイン(ソートテーブルを利用してジョインする)

フェッチジョイン

4) フェッチジョイン(インデックスを利用してジョインする)
5) フェッチジョイン(クラスタキーを利用してジョインする)
6) フェッチジョイン(実表を直接読み込んでジョインする)

ネスティドループジョイン

7) ネスティドループジョイン(実表を直接読み込んでジョインする)
8) ネスティドループジョイン(ワークテーブルを利用してジョインする)

1) マージジョイン(インデックスを利用してジョインする)

ジョインキーを昇順に読み込む方法として、インデックスを利用するマージジョインのアクセスモデルです。

(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

6) フェッチジョイン(実表を直接読み込んでジョインする)

制約アクセスモデルにより読み込んだデータごとに、結合する表を直接読み込みながらジョインを行うアクセスモデルです。

注意

本アクセスモデルは、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を制約アクセスモデルを利用してワークテーブルに格納して、ワークテーブルを読み込みながらネスティドループジョインすると考えてください。