アクセスプランは、以下の形式で出力します。
データベースの検索処理は、データベース資源からデータを読み出し、条件の判定やデータの加工を施し、中間結果としてソートテーブルやワークテーブルにデータを出力するという一連の処理を繰り返すことにより、目的の検索結果を求めます。アクセスプランは、このセクションごとの情報を出力します。
アクセスプランでは、以下の情報を出力します。
どこかのセクションで副問合せを判定する場合に、そのセクションのエレメント情報中の“subquery evaluation”で表示した副番号(副問合せの処理番号)に対応するように、副問合せの処理単位群を表示します。副問合せの副番号は、次の概念図のように表示します。
上図では、Main queryの1番目のセクションに副問合せが2つあるので、副番号は、それぞれ1-1(1番目のセクションの1番目の副問合せ)、1-2(1番目のセクションの2番目の副問合せ)と表現します。
Main queryの2番目のセクションに副問合せがある場合は、副番号は、2-1、2-2となります。
1-2の副問合せから、さらに副問合せがある場合は、1-2の副問合せの1番目のセクションの1番目の副問合せであるため、その副番号は、1-2.1-1のように表現します。
セクション情報は、そのセクションで実行する各エレメントのサマリ情報を出力します。
アクセスプラン上のMain queryまたは各Sub queryごとのセクション番号です。
そのセクションで処理する代表的なエレメント名を表示します。
セクション名 | 意味 |
---|---|
SCAN | 表、インデックス、ソートテーブルおよびワークテーブルからデータを取り出す。 |
M-JOIN | マージジョインを行う。 |
F-JOIN | フェッチジョインを行う。 |
N-JOIN | ネスティドループジョインを行う。 |
GROUP | 検索結果をグループ化する。 |
UPDATE | 表およびインデックスに対して、レコードの挿入、データの更新およびレコードの削除を行う。 |
データの入力となる資源名を表示します。データベース資源の場合は、表名、インデックス名、または、DSO名を先頭から18バイトの範囲で表示します。中間結果(ソートテーブルまたはワークテーブル)を入力する場合は、SORT0001やWORK0001のようにSymfoware/RDB内部で使用する番号付きの仮想作業域名で表示します。
インデックスと表を同時に検索するなど、1つのセクションで複数のデータ資源を入力する場合に、入力資源名を表示します。1つしか資源を入力しない場合は、何も表示しません。
出力先の資源名を表示します。出力先がない場合(副問合せの最終セクション)は、何も表示しません。
出力資源名 | 意味 |
---|---|
SORTxxxx | 出力するソートテーブル名 |
WORKxxxx | 出力するワークテーブル名 |
APPL | 検索結果をアプリケーションに返却する |
表DSO名 | データベースを更新(INS/DEL/UPD)する場合の表名または表のDSO名 |
1つのセクションに複数の処理内容がある場合は、複数行で表示することがあります。また、ジョインを行うときは、ジョインする表の数に応じて複数行で表示します。
表を読み込みながら更新対象行を見つけて、その行を更新する。
=sno===sectname=====input1==============input2==============output/update====== 1 : SCAN [TBL1_BASE_DSO ][ ][ ] UPDATE [ ][ ][TBL1_BASE_DSO ]
表を読み込みながらグループ化する。
=sno===sectname=====input1==============input2==============output/update====== 1 : SCAN [TBL1_BASE_DSO ][ ][ ] GROUP [ ][ ][APPL ]
TBL1とTBL2をフェッチジョインする。
=sno===sectname=====input1==============input2==============output/update====== 1 : F-JOIN [TBL1_BASE_DSO ][ ][ ] [TBL2_IX1_DSO ][TBL2_BASE_DSO ][APPL ]
当該セクション内でのエレメントの番号を表示します。
エレメント名を表示します。エレメント名には以下のものがあります。
エレメント名 | 意味 |
---|---|
SCAN | 表、インデックス、ソートテーブルまたはワークテーブルからデータを取り出す |
MERGE JOIN | マージジョインを行う |
FETCH JOIN | フェッチジョインを行う |
NESTED LOOP JOIN | ネスティドループジョインを行う |
INSERT | 表、インデックス、ソートテーブルまたはワークテーブルにレコードを挿入する |
DELETE | 表およびインデックスからレコードを削除する |
UPDATE | 表およびインデックスのデータを更新する |
OUTPUT | 問合せの結果をアプリケーションに返却する |
GROUPING | 複数のレコードをグループ化する |
TRIGGER EXECUTION | トリガを実行する |
各エレメントの詳細情報について説明します。
詳細情報 | 意味 |
---|---|
table name | アクセス対象の表名、ソートテーブル名、ワークテーブル名 |
dsi access | DSIの読込み情報 |
scan type | 読込みのアクセス方式 |
dso name | アクセス対象の表名、インデックス名またはDSO名 |
condition evaluation | 条件の判定 |
subquery evaluation | 副問合せを判定する場合の副問合せの副番号 |
stop key evaluation | 検索処理を止める場合の条件や句の詳細 ROWNUM : ROWNUMの条件を判定して検索処理を止める LIMIT : 最大件数指定LIMITを判定して検索処理を止める |
scan | アクセス対象が、表またはインデックスの場合に、1DSI当たりの読み込むレコード件数の見積り値 |
注1) DSI分割を行っていない場合はこの情報は出力しません。
注2) (n)はインデックス検索に使用した列数を表します。
表の全件検索(並列スキャン)の場合
[ 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 25000
インデックスの検索の場合
[ 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 250
インデックスと表を同時に検索する場合
[ 1] SCAN ELEMENT table name SCM1.TBL1 scan type INDEX TABLE SCAN(2) dso name TBL1_IX1_DSO [PAGE/SH] TBL1_BASE_DSO [PAGE/SH] condition evaluation Yes subquery evaluation -->2-1 scan record number 50
インデックスと表を同時に検索しながら、ROWNUMの条件を判定して検索処理を止める場合
[ 1] SCAN ELEMENT table name SCM1.TBL1 scan type INDEX TABLE SCAN(2) dso name TBL1_IX1_DSO [PAGE/SH] TBL1_BASE_DSO [PAGE/SH] condition evaluation Yes stop key evaluation ROWNUM scan record number 50
インデックスと表を同時に検索しながら、最大件数指定LIMITを判定して検索処理を止める場合
[ 1] SCAN ELEMENT table name SCM1.TBL1 scan type INDEX TABLE SCAN(2) dso name TBL1_IX1_DSO [PAGE/SH] TBL1_BASE_DSO [PAGE/SH] condition evaluation Yes stop key evaluation LIMIT scan record number 50
ソートテーブルからTIDを取り出し、表を検索する場合
[ 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
参考
ソートテーブルからTIDを取り出して表を検索するときに読み込むレコード件数の見積り値は、1件と表現します。表からデータを取り出すSCANエレメントは、ソートテーブルに格納されているレコード件数分のSCANを繰り返します。
“stop key evaluation”によって検索処理を止めますが、読み込むレコード件数の見積り値は、検索処理を止めない場合と同じ値になります。
詳細情報 | 意味 |
---|---|
n) table name | ジョイン対象の表名、ソートテーブル名またはワークテーブル名ソートテーブル名、ワークテーブル名は以下の形式で表示する。 |
dsi access | DSIの読み込み情報 |
scan type | 読込みのアクセス方式 |
dso name | アクセス対象の表名、インデックス名またはDSO名 |
join key column | MERGE JOIN時にジョインで使用した列数 |
condition evaluation | 条件の判定 Yes : 条件を判定する No : 条件を判定しない |
subquery evaluation | 副問合せを判定する場合の副問合せの副番号 |
stop key evaluation | 検索処理を止める場合の条件や句の詳細 |
scan record number | アクセス対象が、表またはインデックスの場合に、1DSI当たりの読み込むレコード件数の見積り値 |
注1) DSI分割を行っていない場合はこの情報は出力しません。
注2) (n)はインデックス検索に使用した列数を表します。
MERGE JOINの詳細情報
[ 1] MERGE JOIN ELEMENT 1) table name SCM1.TBL1 scan type INDEX ALL SCAN dso name TBL1_IX1_DSO [DSI/SH] join key column 2 condition evaluation No scan record number 2500 2) table name SORT0001 scan type TABLE ALL SCAN join key column 2 condition evaluation Yes
FETCH JOINの詳細情報
[ 1] FETCH JOIN ELEMENT 1) table name SCM1.TBL1 dsi access SELECTED DSI scan type INDEX KEY SCAN(3) dso name TBL1_IX1_DSO [PAGE/SH] condition evaluation Yes scan record number 20 2) table name SCM1.TBL2 dsi access ONE DSI scan type INDEX TABLE SCAN(2) dso name TBL2_IX1_DSO [PAGE/SH] TBL2_BASE_DSO [PAGE/SH] condition evaluation Yes scan record number 10
FETCH JOINの詳細情報(ROWNUMの条件を判定して検索処理を止める場合)
[ 1] FETCH JOIN ELEMENT 1) table name SCM1.TBL1 dsi access SELECTED DSI scan type INDEX KEY SCAN(3) dso name TBL1_IX1_DSO [PAGE/SH] condition evaluation Yes scan record number 20 2) table name SCM1.TBL2 dsi access ONE DSI scan type INDEX TABLE SCAN(2) dso name TBL2_IX1_DSO [PAGE/SH] TBL2_BASE_DSO [PAGE/SH] condition evaluation Yes stop key evaluation ROWNUM scan record number 10
FETCH JOINの詳細情報(最大件数指定LIMITを判定して検索処理を止める場合)
[ 1] FETCH JOIN ELEMENT 1) table name SCM1.TBL1 dsi access SELECTED DSI scan type INDEX KEY SCAN(3) dso name TBL1_IX1_DSO [PAGE/SH] condition evaluation Yes scan record number 20 2) table name SCM1.TBL2 dsi access ONE DSI scan type INDEX TABLE SCAN(2) dso name TBL2_IX1_DSO [PAGE/SH] TBL2_BASE_DSO [PAGE/SH] condition evaluation Yes stop key evaluation LIMIT scan record number 10
NESTED LOOP JOINの詳細情報
[ 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 subquery evaluation -->2-1 scan record number 2000
参考
フェッチジョインおよびネスティドループジョインの2番目の表の読み込むレコード件数の見積りは、1番目の表の1レコードに結合する1DSI当たりのレコード数を表現します。
“stop key evaluation”によって検索処理を止めますが、読み込むレコード件数の見積り値は、検索を止めない場合と同じ値になります。
詳細情報 | 意味 |
---|---|
table name | 挿入対象の表名、ソートテーブル名またはワークテーブル名 |
dso name | レコード挿入対象の表名、インデックス名またはDSO名の一覧 |
insert record length | 挿入対象がソートテーブルまたはワークテーブルの場合、ソートテーブルまたはワークテーブルに出力するレコード長を表示する。(単位はバイト) |
データベースへのINSERTの場合
[ 1] INSERT ELEMENT table name SCM1.TBL1 dso name TBL1_BASE_DSO [REC/EX] TBL1_IX1_DSO [REC/EX]
ソートテーブルへのINSERTの場合
[ 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 500 [ 2] INSERT ELEMENT table name SORT0001 insert record length 58
詳細情報 | 意味 |
---|---|
table name | レコード削除対象の表名 |
dso name | レコード削除対象の表名、インデックス名またはDSO名の一覧 EX : 非共用モード |
表とインデックスからレコードを削除する場合
[ 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] DELETE ELEMENT table name SCM1.TBL1 dso name TBL1_BASE_DSO [PAGE/EX] TBL1_IX1_DSO [PAGE/EX]
詳細情報 | 意味 |
---|---|
table name | 更新対象の表名 |
dso name | 更新対象の表名、インデックス名またはDSO名の一覧 |
表とインデックスのデータを更新する場合
[ 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] UPDATE ELEMENT table name SCM1.TBL1 dso name TBL1_BASE_DSO [PAGE/EX] TBL1_IX1_DSO [PAGE/EX]
詳細情報 | 意味 |
---|---|
record length | 出力するレコード長(単位はバイト) |
表をインデックスで検索して、結果をアプリケーションに返却する場合
[ 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 10 [ 2] OUTPUT ELEMENT record length 150
詳細情報 | 意味 |
---|---|
condition evaluation | 条件の判定 |
subquery evaluation | 副問合せを判定する場合の副問合せの副番号 |
stop key evaluation | 検索処理を止める場合の条件や句の詳細 |
表を検索してグループ化する場合
[ 1] SCAN ELEMENT table name SCM1.TBL1 scan type TABLE ALL SCAN dso name TBL1_BASE_DSO [NONE/NONE] condition evaluation No scan record number 1000 [ 2] GROUPING ELEMENT condition evaluation No [ 3] OUTPUT ELEMENT record length 8
ソートを検索してグループ化しながらROWNUMの条件を判定して検索処理を止める場合
[ 1] SCAN ELEMENT table name SORT0001 scan type TABLE ALL SCAN condition evaluation No [ 2] GROUPING ELEMENT condition evaluation Yes stop key evaluation ROWNUM [ 3] OUTPUT ELEMENT record length 10
ソートを検索してグループ化しながら最大件数指定LIMITを判定して検索処理を止める場合
[ 1] SCAN ELEMENT table name SORT0001 scan type TABLE ALL SCAN condition evaluation No [ 2] GROUPING ELEMENT condition evaluation Yes stop key evaluation LIMIT [ 3] OUTPUT ELEMENT record length 10
詳細情報 | 意味 |
---|---|
trigger name | 実行するトリガの名前一覧 |
表を更新したときにトリガを実行する場合
[ 1] SCAN ELEMENT table name SCM1.TBL1 scan type TABLE KEY SCAN dso name TBL1_BASE_DSO [REC/SH] condition evaluation No scan record number 1 [ 2] UPDATE ELEMENT table name SCM1.TBL1 dso name TBL1_BASE_DSO [REC/EX] TBL1_IX1_DSO [REC/EX] [ 3] TRIGGER EXECUTION ELEMENT trigger name SCM1.TRIGGER1
動作環境には、以下の情報を出力します。
詳細情報 | 意味 |
---|---|
transaction access | トランザクションのアクセスモード |
transaction isolation | トランザクションの独立性水準 |
R_LOCK | 行単位の排他の指定有無 |
JOIN_RULE | ジョインにマージジョインを優先するかフェッチジョインを優先するか。 |
SCAN_KEY_ARITHMETIC_RANGE | 四則演算の検索範囲について、インデックス範囲検索、または、クラスタキーの検索を行うか否か |
SCAN_KEY_CAST | 探索条件のCASTオペランドに指定した列でインデックスの範囲検索、または、クラスタキー検索を行うか |
JOIN_ORDER | 結合表の中に指定した表と外に指定した表のジョイン順の指定。 |
TID_SORT | インデックス検索と表データ取得のアクセスモデルでTIDソートを利用するか否か。 |
TID_UNION | TIDユニオンマージのアクセスモデルを有効にするか。 |
USQL_LOCK | UPDATE文:探索またはDELETE文:探索の更新標的レコードを位置づける部分の占有モードの指定 |
IGNORE_INDEX | インデックスを使用しないアクセスプランを選択するか否か。 |
INACTIVE_INDEX_SCAN | 非活性状態のインデックスDSIを含むインデックスを使用したアクセスプランを選択するか否か。 |
SAME_COST_JOIN_ORDER | 最適化情報を設定していない場合、ジョイン順をV5以前と同じにするか否か。 |
GROUP_COL_COND_MOVE | 導出表を絞り込む探索条件を指定した場合、その探索条件を導出表のWHERE句に移動するか否か。 |
CHOOSE_TID_UNION | WHERE句に行値構成子、または等価な探索条件を指定した場合、TIDユニオンマージを含めてコスト評価して、アクセスプランを作成するか否か YES : SQL文のWHERE句の指定が、複数の列から構成されるインデックスを使用した検索で、行値構成子、または等価な探索条件を指定した場合、TIDユニオンマージ、インデックス検索、またはインデックス検索と表データ取得のアクセスプランから処理手順にかかるコストを評価して、効率の良い処理手順を決定する(V10.1.x以前のアクセスプラン)。 NO : SQL文のWHERE句の指定が、複数の列から構成されるインデックスを使用した検索で、行値構成子、または等価な探索条件を指定した場合、V11.0.0で改善したインデックス検索、またはインデックス検索と表データ取得のアクセスプランを選択する。 |
MAX_SCAN_RANGE | インデックス、クラスタキー、または分割キーの検索範囲の最大数 |
SS_RATE | 述語ごとの検索範囲の選択率の値 |