制約系アクセスモデルには、以下のものがあります。
アクセスモデル名 |
---|
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) レコードを取得してアプリケーションに返却する。
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はこのアクセスモデルを選択します。
なお、以下のいずれかの条件を満たす場合、並列スキャンのアクセスモデルは選択しません。
SQL文に並列指定を指定した場合
表をDSI分割していない、または1つのDSIに対するアクセスである場合
ROW_ID検索のアクセスモデルが利用できる場合
クラスタキー検索のアクセスモデルが利用できる場合
ASSIST指定のUSE_INDEXを指定した場合
動作環境ファイルにデータベースを並列に検索するように指定した場合
表をDSI分割していない、または1つのDSIに対するアクセスである場合
ROW_ID検索のアクセスモデルが利用できる場合
クラスタキー検索のアクセスモデルが利用できる場合
インデックス検索のアクセスモデルが利用できる場合
インデックス検索と表データ取得のアクセスモデルが利用できる場合
TIDユニオンマージのアクセスモデルが利用できる場合
(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