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

H.1.1 制約系アクセスモデル

制約系アクセスモデルには、以下のものがあります。

アクセスモデル名

ROW_ID検索

クラスタキー検索

インデックス検索

インデックス検索と表データ取得

TIDユニオンマージ

表の全件検索

並列スキャン

ROW_ID検索

WHERE探索条件に指定したROW_IDに対する条件を元に、検索対象のレコードを取り出すアクセスモデルです。WHERE探索条件にROW_IDを指定すると、Symfoware/RDBはこのアクセスモデルを選択します。

(1) WHERE探索条件に指定したROW_IDにより、TABLE KEY SCANを行う。

(2) レコードを取得してアプリケーションに返却する。


[アクセスプランの出力例]

==================================================================================
Main query 
=sno===sectname=====input1=================input2==============output/update======
   1 : SCAN        [TBL1_BASE_DSO        ][                  ][APPL              ]
----------------------------------------------------------------------------------
  [  1] 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
  [  2] OUTPUT ELEMENT
        record length         200

クラスタキー検索

WHERE探索条件に指定した条件が、クラスタキーを一意に識別する場合に、クラスタキーにより検索対象レコードを取り出すアクセスモデルです。このアクセスモデルは表の格納構造がRANDOMの表に対してのみ可能です。このアクセスモデルが可能な場合は、Symfoware/RDBはクラスタキー検索のアクセスモデルを選択します。

(1) WHERE探索条件より、クラスタキー値を生成し、TABLE KEY SCANを行う。

(2) レコードを取得してアプリケーションに返却する。


[アクセスプランの出力例]

================================================================================
Main query 
=sno===sectname=====input1================input2=============output/update======
   1 : SCAN        [TBL1_BASE_DSO       ][                 ][APPL              ]
--------------------------------------------------------------------------------
  [  1] SCAN ELEMENT 
        table name       SCM1.TBL1
        dsi access       ONE DSI
        scan type        TABLE KEY SCAN
        dso name         TBL1_BASE_DSO          [PAGE/SH]
        condition evaluation  No
        scan record number    1 
  [  2] OUTPUT ELEMENT
        record length         200

インデックス検索

WHERE探索条件に指定した条件から、インデックスの検索範囲を作成して、インデックスを検索するアクセスモデルです。SQL文中に指定した列がすべてインデックスで取得できる場合に、表にアクセスを行わずに、インデックスのみからデータを取り出します。行単位の排他を指定している場合は、必ず表にアクセスするため、このアクセスモデルは選択しません。

(1) WHERE探索条件よりインデックス検索範囲を作成し、INDEX KEY SCANを行う。検索範囲を生成できない場合は、INDEX ALL SCANを行うこともある。

(2) レコードを取得してアプリケーションに返却する。


[アクセスプランの出力例]

==============================================================================
Main query
=sno===sectname=====input1==============input2=============output/update======
   1 : SCAN        [TBL1_IX1_DSO      ][                 ][APPL              ]
------------------------------------------------------------------------------
  [  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    10
  [  2] OUTPUT ELEMENT
        record length         8

インデックス検索と表データ取得

WHERE探索条件に指定した条件から、インデックスの検索範囲を作成して、インデックスを検索し、インデックスから取得できないデータを表から取得するアクセスモデルです。

また、行単位の排他を指定している場合にインデックスを使用して検索を行うと、必ず表からデータを取得します。

(1) WHERE探索条件よりインデックス探索範囲を作成し、INDEX KEY SCANを行う。

(2) TIDを取得する。

(3) 表に対するI/O効率向上のためにTIDソートを行う場合は、TIDでソートを行う。

(4) ソートからTIDを取得(TABLE ALL SCAN)し、表をTABLE KEY SCANする。

(5) レコードを取得してアプリケーションに返却する。


[アクセスプランの出力例]

===============================================================================
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(2)
        dso name         TBL1_IX1_DSO        [PAGE/SH] 
        condition evaluation  No
        scan record number    10
  [  2] INSERT ELEMENT 
        table name       SORT0001
        insert record length  12
-------------------------------------------------------------------------------
   2 : SCAN        [SORT0001          ][TBL1_BASE_DSO     ][APPL              ]
-------------------------------------------------------------------------------
  [  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] OUTPUT ELEMENT
        record length         200

参考

TIDソートは、TIDを元に表データを取得するときに、表に対するI/O効率を高める目的で行います。インデックスのデータ部のレコードは、インデックスキー値+TIDで昇順に並んでいます。このため、インデックスを範囲検索して取得したTIDで順次表からデータを取得すると、表のページを再読込みする可能性があります。TIDでソートすることにより表ページの再読込みを抑止しています。なお、インデックスを構成するすべての列に対してWHERE探索条件で比較述語“=”で条件を与えると、TIDの昇順にデータを取り出すことができるため、TIDソートは行いません。この場合は、INDEX TABLE SCANのアクセス方式が使用されます。また、TIDソートはチューニングパラメタ“TID_SORT”に“NO”を指定することにより抑止することができます。

(1) WHERE探索条件よりインデックス検索範囲を作成し、INDEX TABLE SCANを行う。

(2) レコードを取得してアプリケーションに返却する。

TIDユニオンマージ

WHERE探索条件にブール演算子“OR”を指定した場合に、ORで結合された条件のそれぞれについてインデックスの検索範囲を作成してインデックスを検索します。それぞれの結果を1つのソートテーブルに格納します。ソートテーブルからの取出し時に、TIDの重複を排除してから、表データを取得するアクセスモデルです。

(1) WHERE探索条件よりインデックス検索範囲を作成し、INDEX KEY SCANを行う。

(2) TIDを取得し、ソートテーブルにINSERTする。

(3) WHERE探索条件よりインデックス検索範囲を作成し、INDEX KEY SCANを行う。

(4) TIDを取得し、ソートテーブルにINSERTする。

(5) 重複レコードを省くため、TIDソートを行う。

(6) ソートからTIDを取得(TABLE ALL SCAN)し、表をTABLE KEY SCANする。

(7) レコードを取得してアプリケーションに返却する。


[アクセスプランの出力例]

===============================================================================
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(2)
        dso name         TBL1_IX1_DSO        [PAGE/SH]
        condition evaluation  No
        scan record number    10
  [  2] INSERT ELEMENT
        table name       SORT0001
        insert record length  12
-------------------------------------------------------------------------------
   2 : SCAN        [TBL1_IX2_DSO      ][                  ][SORT0001          ]
-------------------------------------------------------------------------------
  [  1] SCAN ELEMENT
        table name       SCM1.TBL1
        scan type        INDEX KEY SCAN(1)
        dso namev        TBL1_IX2_DSO        [PAGE/SH]
        condition evaluation  No
        scan record number    30
  [  2] INSERT ELEMENT
        table name       SORT0001
        insert record length  12
-------------------------------------------------------------------------------
   3 : SCAN        [SORT0001          ][TBL1_BASE_DSO     ][APPL              ]
-------------------------------------------------------------------------------
  [  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  No
        scan record number    1
  [  3] OUTPUT ELEMENT
        record length         200

表の全件検索

表の全レコードを読み込みながら、表データを取得するアクセスモデルです。表の全データを読み込むため、検索効率が悪く、Symfoware/RDBは、他に有効なアクセスモデルを選択できない場合に、このアクセスモデルを選択します。

(1) TABLE ALL SCANを行う。

(2) レコードを取得してアプリケーションに返却する。


[アクセスプランの出力例]

===============================================================================
Main query
=sno===sectname=====input1==============input2==============output/update======
   1 : SCAN        [TBL1_BASE_DSO     ][                  ][APPL              ]
-------------------------------------------------------------------------------
  [  1] SCAN ELEMENT
        table name       SCM1.TBL1
        scan type        TABLE ALL SCAN
        dso name         TBL1_BASE_DSO       [DSI/SH]
        condition evaluation  Yes
        scan record number    800
  [  2] OUTPUT ELEMENT
        record length         200

並列スキャン

表のレコードをDSIごとに並列に読み込んで表データを取得するアクセスモデルです。並列スキャンが動作する環境下で、SQL文に並列指定を指定するか、動作環境ファイルに並列クエリで動作するように指定すると、Symfoware/RDBはこのアクセスモデルを選択します。

なお、以下のいずれかの条件を満たす場合、並列スキャンのアクセスモデルは選択しません。

(1) DSIごとに並列にTABLE ALL SCANを行う。

(2) レコードを取得してアプリケーションに返却する。


[アクセスプランの出力例]

===============================================================================
Main query
=sno===sectname=====input1==============input2==============output/update======
   1 : SCAN        [TBL1_BASE_DSO     ][                  ][APPL              ]
-------------------------------------------------------------------------------
  [  1] SCAN ELEMENT
        table name       SCM1.TBL1
        dsi access       ALL DSI
        scan type        TABLE PARALLEL SCAN
        dso name         TBL1_BASE_DSO       [DSI/SH]
        condition evaluation  Yes
        scan record number    500
  [  2] OUTPUT ELEMENT
        record length         12