PLAN_TABLE

プラン表 PLAN_TABLE には、EXPLAIN ステートメントの結果から収集されるアクセス・パスに関する情報が含まれています。

ヒント変更の開始IBM® Db2 Administration Foundation for z/OS®IBM Db2 for z/OS Developer Extension などのツールのビジュアルな説明機能を使用することで、SQL 文で使用されるアクセスパスの図を生成することができます。変更の終わり
プログラム固有のプログラミングインターフェース情報の開始。
推奨: システムで管理されているEXPLAINテーブルにデータを手動で挿入しないこと、および、不要となったEXPLAINテーブルのデータを削除する際には注意すること。 このデータは、 Db2 のEXPLAIN関数と最適化ツールのみで操作されることを意図しています。 一部の最適化ツールは、さまざまな EXPLAIN 表のインスタンスに依存しています。 そのようなツール用に作成されているデータや EXPLAIN 表のインスタンスを削除または除去しないように注意してください。

修飾子

変更の開始サブシステムまたはデータ共用グループには、ユーザー ID によって修飾されるこれらの表の複数インスタンスを含めることができます。 これらの表には、EXPLAIN ステートメントまたはバインドを発行する場合に、ステートメントのコスト情報が追加されます。 これらの表には、BIND コマンドまたは REBIND コマンドで EXPLAIN(YES) か EXPLAIN(ONLY) を指定した場合にも情報が追加されます。 SQL 最適化ツールも、ユーザー ID で修飾された EXPLAIN 表を作成する場合があります。 この表のインスタンスを作成するための SQL ステートメントは、SDSNSAMP ライブラリーのメンバー DSNTESC にあります。変更の終わり

サンプルの CREATE TABLE ステートメント

各 EXPLAIN テーブルのサンプル CREATE TABLE ステートメントはプレフィックス. SDSNSAMP ライブラリのメンバー DSNTESC にあります。 EXPLAINテーブルを現在の Db2 の形式にアップグレードするには、ADMIN_EXPLAIN_MAINTストアド・プロシージャを呼び出します。 ADMIN_EXPLAIN_MAINTは、EXPLAINテーブルを作成したり、現在の Db2 リリース用のフォーマットにアップグレードしたり、その他の保守作業を行うこともできます。 アクション入力パラメータを使用してこれらの各タスクを要求する方法については、 ADMIN_EXPLAIN_MAINTストアド・プロシージャを参照してください。 また、EXPLAINテーブルを現在の Db2 の形式にアップグレードするタスクのみを実行する場合は、ジョブDSNTIJXAを実行することもできます。 DSNTIJXAは、アップグレードを実行するために REXX のexecコマンドDSNTXTAを呼び出します。 DSNTIJXA の実行に関する詳細については、「移行ステップ 25: EXPLAIN テーブルを現在の形式に変換する」を参照してください。

オプションの PLAN_TABLE フォーマット

PLAN_TABLE インスタンスでは、サンプルの CREATE TABLE ステートメントに示されているよりも少ない列が含まれるフォーマットを使用できます。 ただし、PLAN_TABLE のインスタンスでは、以下のいずれかのフォーマットを使用する必要があります。
変更の開始Db2 12 フォーマット変更の終わり
変更の開始サンプルの CREATE TABLE ステートメントに示されるすべての列 (PER_STMT_ID 列 (COLCOUNT=67) まで)。変更の終わり
Db2 11 形式
サンプルの CREATE TABLE ステートメントに示されるすべての列 (EXPANSION_REASON 列 (COLCOUNT=66) まで)。 このフォーマットは Db2 12 で非推奨となっています。
重要: EXPLAINテーブルに Db2 11 形式よりも古い形式のテーブルが存在する場合、 Db2 はEXPLAINテーブルに行を挿入しようとする操作に対してエラーを返します。 EXPLAINテーブルを現在の Db2 の形式にアップグレードするには、ADMIN_EXPLAIN_MAINTストアド・プロシージャを呼び出します。 ADMIN_EXPLAIN_MAINTは、EXPLAINテーブルを作成したり、現在の Db2 リリース用のフォーマットにアップグレードしたり、その他の保守作業を行うこともできます。 アクション入力パラメータを使用してこれらの各タスクを要求する方法については、 ADMIN_EXPLAIN_MAINTストアド・プロシージャを参照してください。 また、EXPLAINテーブルを現在の Db2 の形式にアップグレードするタスクのみを実行する場合は、ジョブDSNTIJXAを実行することもできます。 DSNTIJXAは、アップグレードを実行するために REXX のexecコマンドDSNTXTAを呼び出します。 DSNTIJXA の実行に関する詳細については、「移行ステップ 25: EXPLAIN テーブルを現在の形式に変換する」を参照してください。

列の説明

サブシステムまたはデータ共用グループには、これらの表の複数を備えることができます。これには、修飾子 SYSIBM を持つ表、修飾子 DB2OSCA を持つ表、およびユーザー ID によって修飾される追加の表が含まれます。

次の表は、PLAN_TABLE の列の説明を示しています。

表 1. PLAN_TABLE の列の説明
列名 データ型 説明
QUERYNO 非 NULL の整数 解釈されるステートメントを識別する番号。 元になる値は、行のコンテキストに応じて異なります。
EXPLAIN ステートメントにより作成される行の場合
SELECT、 INSERT、 UPDATE、 MERGE、および DELETE のステートメント構文のオプション部分である QUERYNO 文節で指定された番号
EXPLAIN ステートメントにより作成されない行の場合
Db2 は、ソース・プログラム内の SQL ステートメントの行番号に基づく番号を割り当てます。

QUERYNO の値がソース・プログラム内のステートメント番号に基づく場合、32767 を超える値は 0 として報告されます。 ただし、まれに、値が固有であることが保障されない場合があります。

変更の開始SQL ステートメントがコンパイル済み SQL 関数、ネイティブ SQL プロシージャー、または拡張トリガーに組み込まれている場合に、QUERYNO 文節が指定されると、その値は Db2 によって使用されます。 それ以外の場合は、 Db2 がコンパイルされたSQL関数、ネイティブSQLプロシージャ、またはアドバンスト・トリガ内のSQLステートメントの行番号に基づいて番号を割り当てます。変更の終わり

QBLOCKNO SMALLINT NOT NULL 照会内の各照会ブロックを識別する番号。 この番号の値は、特定の順序でもなければ、必ずしも連続していません。
APPLNAME VARCHAR(24) NOT NULL 行のアプリケーション・プランの名前。 プランから実行される組み込み EXPLAIN ステートメント、またはプランのバインド実行時に解釈されるステートメントのみに適用される。 ブランクは、列が適用外であることを示します。

変更の開始SQLステートメントがコンパイルされたSQL関数、ネイティブSQLプロシージャ、または高度なトリガに埋め込まれている場合、この列は使用されず、空白になります。変更の終わり

PROGNAME VARCHAR(128) NOT NULL 解釈されているステートメントが含まれているプログラムまたはパッケージの名前。 組み込み EXPLAIN ステートメントと、プランまたはパッケージのバインド結果として 解釈されたステートメントに適用される。 ブランクは、列が適用外であることを示します。

変更の開始SQL ステートメントがコンパイル済み SQL 関数またはネイティブ SQL プロシージャーに組み込まれている場合、この列には、コンパイル済み SQL 関数またはネイティブ SQL プロシージャーの特定の名前が示されます。 SQLステートメントが高度なトリガーに埋め込まれている場合、この列にはトリガーの名前が含まれます。変更の終わり

PLANNO SMALLINT NOT NULL QBLOCKNO に示された照会が処理されたステップ の番号。 この列はステップが実行された順序を示す。
METHOD SMALLINT NOT NULL ステップに使用される結合方式を示す番号。
0
このステップの表は、最初にアクセスされる表、アクセスされた直前の表の続き、または使用されない表である。
1
ネスト・ループ結合が使用される。 現行の複合表の行ごとに、新規表の一致する行を検索して結合する。
2
マージ・スキャン結合が使用される。 現行の複合表と新規の表を結合列の順序でスキャンし、一致する行を結合する。
3
ORDER BY、 GROUP BY、 SELECT DISTINCT、 UNION、 INTERSECT、 EXCEPT、 比較述部、 または IN 述部でソートが必要。 このステップは新規表にはアクセスしない。
4
ハイブリッド結合が使用されました。 新規表の結合列における行の順序で、 現行の複合表をスキャンする。 新規表には、リスト・プリフェッチを使ってアクセスする。
CREATOR VARCHAR(128) NOT NULL このステップでアクセスされる新規表の作成者。METHOD が 3 の場合にはブランク。
TNAME VARCHAR(128) NOT NULL 以下のいずれかのオブジェクトの名前。
  • テーブル
  • マテリアライズ照会表
  • 作成済み一時表または宣言済み一時表
  • マテリアライズ・ビュー
  • マテリアライズ表式
  • 中間結果を識別する以下のいずれかのオブジェクト名:
    ' DSNWFQB(qblockno )'
    マテリアライズされる UNION ALL、INTERSECT ALL、EXCEPT ALL、または外部結合の中間結果。 ビューがマージされた場合、ビュー名は表示されません。
    'DSN_DIM_TBLX (qblockno )'
    スター型結合ディメンション表の作業ファイル。
    変更の開始'DSN_SPIX_ TBLX(qblockno )'変更の終わり
    変更の開始横方向の表参照に使用される疎索引。変更の終わり
METHOD が 3 の場合、値はブランクです。
TABNO SMALLINT NOT NULL IBM 専用です。
ACCESSTYPE 1 CHAR(2) NOT NULL 新しいテーブルにアクセスする方法。
A
照会は、アクセラレーター・サーバーに送信される。
'DI'
最終 DOCID リストを戻すために複数の DOCID リストの論理積による
'DU'
最終 DOCID リストを戻すために複数の DOCID リストの和集合による
'DX'
DOCID リストを戻すために、ACCESSNAME で指定される索引の XML 索引スキャンによる
「E」
行変更タイム・スタンプ列を使用して直接行アクセスによる
'H'
ハッシュ・アクセスによる。 オーバーフロー条件が発生した場合は、ACCESSCREATOR と ACCESSNAME によって識別されるハッシュ・オーバーフロー索引が使用される。
'HN'
IN プレディケートを使用したハッシュアクセス、または Db2 が生成するINプレディケート。 ハッシュ・オーバーフロー条件が発生した場合は、ACCESSCREATOR と ACCESSNAME で識別されるハッシュ・オーバーフロー索引が使用される。
'I'
索引による (ACCESSCREATOR および ACCESSNAME で指定)
IN
マッチング述部が IN 述部を含み、IN リストがメモリー内の表からアクセスされる場合は、索引スキャンによる
'I1'
1 フェッチ索引スキャンによる
「M」
複数索引スキャンによる。 この値の入った行には、以下のいずれかの値が入った行が続きます。
  • 'DI'
  • 'DU'
  • 'MH'
  • 'MI'
  • 'MU'
  • 'MX'
'MH'
ACCESSNAME に指定されたハッシュ・オーバーフロー索引による。 この値が入った行は、常に M が入った行の後に続きます。
'MI'
複数索引の論理積による。 この値が入った行は、常に M が入った行の後に続きます。
'MU'
複数索引の和集合による。 この値が入った行は、常に M が入った行の後に続きます。
'MX'
ACCESSNAME で指定された索引の索引スキャンによる。 アクセス方式 DX、DI、または DU の後にアクセス方式 MX が続く場合、DX、DI、または DU によって戻される DOCID リストを使用して、DOCID 索引によって表がアクセスされる。 この値が入った行は、常に M が入った行の後に続きます。
「N」
次のいずれかのタイプです。
  • 索引スキャンによる (一致する述部に IN キーワードが含まれている場合)
  • 索引スキャンによる (Db2 が IN キーワードを使用して照会を再書き込みする場合)
'O'
変更の開始サブクエリ、テーブル式、ビュー、または中間結果テーブルの結果を処理する際には、ワークファイルの使用は回避されました。変更の終わり
'NR'
範囲リスト・アクセス。
'P'
動的ペアワイズ索引スキャンによる
'R'
表スペース・スキャンによる
'RW'
マテリアライズされたユーザー定義表関数の結果の作業ファイルスキャンによる
「V」
SELECT 内の INSERT ステートメントのバッファーによる
ブランク
現在行には適用されない
MATCHCOLS SMALLINT NOT NULL ACCESSTYPE I、IN、I1、N、NR、MX、または DX の場合、索引スキャンで使用される索引キーの数。それ以外の場合は 0。
ACCESSCREATOR VARCHAR(128) NOT NULL ACCESSTYPE I、I1、N、NR、MX、または DX の場合、索引の作成者。それ以外の場合は 0。
ACCESSNAME VARCHAR(128) NOT NULL

ACCESSTYPE I、I1、H、MH、N、NR、MX、または DX の場合、索引の名前。ACCESSTYPE P の場合、DSNPJW(mixopseqno) は MIXOPSEQ 内の開始ペアワイズ結合レグ。それ以外の場合は、ブランク。

INDEXONLY CHAR(1) NOT NULL 索引にアクセスするだけでステップの実行に十分であるかどうかの表示。または、データへのアクセスも必要かどうかの表示。
Y
はい
N
いいえ
SORTN_UNIQ CHAR(1) NOT NULL 重複行を除去するために新規表がソートされるかどうかの表示。
Y
はい
N
いいえ
SORTN_JOIN CHAR(1) NOT NULL 結合方式 2 または 4 のために 新規表がソートされるかどうかの表示。
Y
はい
N
いいえ
SORTN_ORDERBY CHAR(1) NOT NULL ORDER BY により新規表 がソートされるかどうかの表示。
Y
はい
N
いいえ
SORTN_GROUPBY CHAR(1) NOT NULL GROUP BY により新規表 がソートされるかどうかの表示。
Y
はい
N
いいえ
SORTC_UNIQ CHAR(1) NOT NULL 重複行を除去するために複合表 がソートされるかどうかの表示。
Y
はい
N
いいえ
SORTC_JOIN CHAR(1) NOT NULL 結合方式 1、2 または 4 のために 複合表がソートされるかどうかの表示。
Y
はい
N
いいえ
SORTC_ORDERBY CHAR(1) NOT NULL ORDER BY 文節または比較述部に対して 複合表がソートされるかどうかの表示。
Y
はい
N
いいえ
SORTC_GROUPBY CHAR(1) NOT NULL GROUP BY 文節のために複合表 がソートされるかどうかの表示。
Y
はい
N
いいえ
TSLOCKMODE CHAR(3) NOT NULL 新規表、またはその表スペースや表スペース・パーティションの いずれかに設定するロックのモードの指示。 バインド時に分離を判別できる場合は、次の値が示される。
IS
意図的共有ロック
IX
意図的排他ロック
S
共用ロック
U
更新ロック
X
排他ロック
SIX
共有意図的排他ロック
N
UR 分離 (ロックなし)
バインド時に分離レベルが判別できない場合、実行時に分離レベルによって判別されるロック・モードが 以下の値により示される。
NS
UR 分離の場合はロックなし。CS、RS、または RR の場合は S ロック。
NIS
UR 分離の場合はロックなし。CS、RS、または RR の場合は IS ロック。
NSS
UR 分離の場合はロックなし。CS、または RS の場合は IS ロック、RR の 場合は S ロック。
SS
UR、CS、または RS 分離の場合は IS ロック、RR の場合は S ロック。

次の行に続く。

TSLOCKMODE (continued)  

前の行からの続き。

この列のデータは右そろえ。 例えば、IX の場合、ブランクの後に I と X が続く。 列にブランクが含まれる場合、ロックは獲得されていない。

ACCESSTYPE 列のアクセス方式が DX、DI、または DU である場合、XML 索引ページでラッチは獲得されず、新規基本表のデータ・ページまたは行でロックは獲得されず、XML 表と対応する表スペースでも獲得されない。 この場合、TSLOCKMODE の値はブランク。

TIMESTAMP CHAR(16) NOT NULL この列は推奨されません。 代わりに、EXPLAIN_TIME を使用してください。
REMARKS VARCHAR(762) NOT NULL 762 文字以下の任意の文字ストリングを挿入できるフィールド。

Db2 特定の状況下でこの列に値を挿入します。 4, 5

PREFETCH CHAR(1) NOT NULL WITH DEFAULT プリフェッチによってデータ・ページが事前に読み取られるかどうかの表示。
'D'
オプティマイザーは動的プリフェッチを予期する
'S'
純粋な順次プリフェッチ
'L'
ページ・リストを使用したプリフェッチ
'U'
ソートされていない RID リストを使用したリスト・プリフェッチ
ブランク
不明またはプリフェッチなし
COLUMN_FN_EVAL CHAR(1) NOT NULL WITH DEFAULT SQL 集約関数が評価される時点。
'R'
データを表または索引から読み取るとき
'S'
GROUP BY 文節の条件を使ってソートするとき
変更の開始'X'変更の終わり
変更の開始データを表または索引から読み取るとき (OFFSET 節が指定された集約関数の場合)変更の終わり
変更の開始「Y」変更の終わり
変更の開始ソートを実行するとき (OFFSET 節が指定された集約関数の場合)変更の終わり
ブランク
データを検索またはソートしたあと
MIXOPSEQ SMALLINT NOT NULL WITH DEFAULT 複数索引操作におけるステップのシーケンス番号。
1, 2,... n
複数索引プロシージャーのステップの場合 (ACCESSTYPE は MX、MI、MU、DX、DI、または DU)、SQL ステートメントの OR 述部のシーケンス番号。 (ACCESSTYPE は「NR」)。
0
その他の行の場合。
VERSION varchar(122)notNULL、デフォルト パッケージのバージョン ID。 パッケージから実行された組み込み EXPLAIN ステートメントと、パッケージのバインド実行時に解釈されたステートメント、または最適化ヒントのために手動で作成された PLAN_TABLE 行にのみ適用される。
値がブランクでない場合、値は以下のいずれかと同一になる。
  • この EXPLAIN 表の行の作成に使用された、パッケージの VERSION 値。
  • 手動で作成された EXPLAIN 表の行の場合は、ヒントが使用されるステートメントを特定する VERSION 値。
EXPLAIN ステートメントの実行によって、または EXPLAIN オプションによるパッケージのバインドによって作成された行の場合、ステートメントのバージョンはブランクになる。変更の開始
  • 基本トリガーのパッケージ (TYPE='T')
  • SQL 処理オプション VERSION なしでプリコンパイルされたアプリケーションのパッケージ
  • VERSION 値に空ストリングを指定してプリコンパイルされたパッケージ (TYPE=ブランク)
変更の終わり 変更の開始SQLステートメントがコンパイルされたSQL関数またはネイティブSQLプロシージャに埋め込まれている場合、この列は関数またはプロシージャのバージョン識別子を示します。 SQLステートメントが高度なトリガーの本文に埋め込まれている場合、この列は使用されず、空白になります。変更の終わり
COLLID varchar(128)notNULL、デフォルト コレクションID:
'DSNDYNAMICSQLCACHE'
行は動的ステートメント・キャッシュから生成される。
'DSNEXPLAINMODEYES'
行は CURRENT EXPLAIN MODE 特殊レジスターの値に YES を指定するアプリケーションから発生する。
'DSNEXPLAINMODEEXPLAIN'
行は CURRENT EXPLAIN MODE 特殊レジスターの値に EXPLAIN を指定するアプリケーションから発生する。

変更の開始SQLステートメントがコンパイルされたSQL関数、ネイティブSQLプロシージャ、またはアドバンスト・トリガに埋め込まれている場合、この列には、コンパイルされたSQL関数、ネイティブSQLプロシージャ、またはアドバンスト・トリガのスキーマ名が表示されます。変更の終わり

ACCESS_DEGREE SMALLINT 照会でアクティブになった並列タスクまたは操作の数。 この値はバインド時に 判別され、実行時の実際の並列操作数とは異なる可能性がある。 ホスト変数が使用される場合、この列は 0 になる。 43 列未満のプラン表を使用してプランまたはパッケージをバインドした場合、この列には NULL 値が入る。 それ以外の場合は、参照する方式が適用されなければ NULL が入る。
ACCESS_PGROUP_ID 2 SMALLINT 新規表にアクセスするときに使用する並列グループの ID。 並列グループとは、同じ数の並列タスクが含まれている連続操作のグループで、 並列に実行される。 この値はバインド時に決定され、実行時に変更される可能性があります。プランまたはパッケージが43列未満のプラン・テーブルを使用してバインドされた場合、この列にはNULL値が含まれます。 それ以外の場合は、参照する方式が適用されなければ NULL が入る。
JOIN_DEGREE SMALLINT 複合表と新規表を結合するときに使用する並列の操作またはタスクの数。 この値はバインド時に決定され、 ホスト変数が使用される場合は 0 になることがある。 実行時の実際の並列の操作またはタスクの数は、 それとは異なる可能性がある。 43 列未満のプラン表を使用してプランまたはパッケージをバインドした場合、この列には NULL 値が入る。 それ以外の場合は、参照する方式が適用されなければ NULL が入る。
JOIN_PGROUP_ID 2 SMALLINT 複合表と新規表を結合するときに使用する並列グループの ID。 この値はバインド時に判別され、実行時には値が異なることがある。 43 列未満のプラン表を使用してプランまたはパッケージをバインドした場合、この列には NULL 値が入る。 それ以外の場合は、参照する方式が適用されなければ NULL が入る。
SORTC_PG ROUP_ID3 SMALLINT 複合表の並列ソートのための 並列グループ ID。 43 列未満のプラン表を使用してプランまたはパッケージをバインドした場合、この列には NULL 値が入る。 それ以外の場合は、参照する方式が適用されなければ NULL が入る。
SORTN_PGROUP_ID3 SMALLINT 新規表の並列ソートのための並列グループ ID。 43 列未満のプラン表を使用してプランまたはパッケージをバインドした場合、この列には NULL 値が入る。 それ以外の場合は、参照する方式が適用されなければ NULL が入る。
並列モード2 CHAR(1) バインド時に使用した並列処理がある場合、そのタイプ。
C
照会 CP 並列処理。
43 列未満のプラン表を使用してプランまたはパッケージをバインドした場合、参照先のメソッドが適用されない場合、またはプランやパッケージが DB2® 10 より前のバージョンにバインドされた場合、この列には NULL 値が入る。
MERGE_JOIN_COLS SMALLINT マージ・スキャン結合 (方式 2) で結合された列の数。 43 列未満のプラン表を使用してプランまたはパッケージをバインドした場合、この列には NULL 値が入る。 それ以外の場合は、参照する方式が適用されなければ NULL が入る。
CORRELATION_NAME VARCHAR(128) ステートメントで指定された表またはビューの相関名。 相関名が存在しない場合、この列は NULL になる。 43 列未満のプラン表を使用してプランまたはパッケージをバインドした場合、この列には NULL 値が入る。 それ以外の場合は、参照する方式が適用されなければ NULL が入る。
PAGE_RANGE CHAR(1) NOT NULL WITH DEFAULT 表がページ範囲スクリーニングの条件を満たすかどうかの表示。 条件を満たしていれば、必要な表パーティション以外はスキャンする必要がない。
Y
はい
ブランク
いいえ
JOIN_TYPE CHAR(1) NOT NULL WITH DEFAULT 結合のタイプ:
F
FULL OUTER JOIN
L
LEFT OUTER JOIN
P
ペアワイズ結合
S
スター型結合
ブランク
INNER JOIN または結合なし

RIGHT OUTER JOIN は使用時に LEFT OUTER JOIN に変換されるので、 JOIN_TYPE は L になる。

GROUP_MEMBER varchar(24) not null with default EXPLAINを実行した Db2 のメンバー名。 EXPLAINが実行された際に、 Db2 サブシステムがデータ共有環境になかった場合、この列は空白になります。
IBM_SERVICE_DATA VARCHAR(254) FOR BIT DATA この列には、 IBM のみで使用される値が含まれています。
WHEN_OPTIMIZE CHAR(1) NOT NULL WITH DEFAULT アクセス・パスが判別されている場合、以下を指定できます。
ブランク
バインド時に、すべてのホスト変数、パラメーター・マーカー、または特殊レジスターに対してデフォルトのフィルター係数を使用します。
B
バインド時に、すべてのホスト変数、パラメーター・マーカー、または特殊レジスターに対してデフォルトのフィルター係数を使用します。ただし、ステートメントは、入力ホスト変数、パラメーター・マーカー、または特殊レジスターの入力変数値を使用して、実行時に再最適化されます。 再最適化が行われるようにするには、バインド・オプション REOPT(ALWAYS)、REOPT(AUTO)、または REOPT(ONCE) を指定する必要があります。
R
実行時に、すべてのホスト変数、パラメーター・マーカー、または特殊レジスターに対して入力変数を使用します。 この処理が行われるようにするには、バインド・オプション REOPT(ALWAYS)、REOPT(AUTO)、または REOPT(ONCE) を指定する必要があります。
QBLOCK_TYPE1 CHAR(6) NOT NULL WITH DEFAULT それぞれの照会ブロックに関して、実行された SQL 操作のタイプを示す。 最も外側のクエリでは、この列はステートメントの種類を識別します。 可能な値は以下の通りです。
「選択」
SELECT
'INSERT'
INSERT
UPDATE」
UPDATE
'MERGE'
MERGE
「削除」
DELETE
'SELUPD'
SELECT (FOR UPDATE OF を指定)
'DELCUR'
DELETE WHERE CURRENT OF CURSOR
'UPDCUR'
UPDATE WHERE CURRENT OF CURSOR
'CORSUB'
相関副選択または全選択
変更の開始'COTBLX'変更の終わり
変更の開始横方向の参照を行う表式。変更の終わり
'TRUNCA'
TRUNCATE
'NCOSUB'
非相関副選択または全選択
'TABLEX'
表式
'TRIGGR'
CREATE TRIGGER の WHEN 文節
'UNION'
UNION
'UNIONA'
UNION ALL
'INTERS'
INTERSECT
'INTERA'
INTERSECT ALL
'EXCEPT'
EXCEPT
'EXCPTA'
EXCEPT ALL
'PRUNED'
常に偽の WHERE 文節の場合など、照会はゼロ行を規定するように保証されているため、Db2 は照会のアクセス・パスを生成しません。 以下に例を示します。WHERE 0=1
BIND_TIME TIMESTAMP NOT NULL WITH DEFAULT この列は推奨されません。 代わりに、EXPLAIN_TIME を使用してください。
OPTHINT VARCHAR(128) NOT NULL WITH DEFAULT Db2 の最適化ヒントとしてこの行を識別するための文字列。 Db2 アクセスパスを選択する際に、この行を入力として使用します。
HINT_USED VARCHAR(128) NOT NULL WITH DEFAULT 以下の値のいずれか。
'APREUSE'
バインド時または再バインド時に APREUSE オプションが指定されたため、アクセス・パスが正常に再使用された場合。
'opthint-value '
PLAN_TABLE アクセス・パス・ヒントが使用された場合。 opthint-value は、使用されたヒントの OPTHINT 列の値です。
'SYSQUERYPLAN クエリID '
ステートメント・レベルのアクセス・パス・ヒントが使用された場合。 query-id は、ヒントの SYSQUERYPLAN カタログ表の QUERYID 列値です。
'SYSQUERYSEL query-id '
述部選択度のオーバーライドが使用された場合。 query-id は、ヒントの SYSQUERYSEL カタログ表の行の QUERYID 列値です。
'EXPLAIN PACKAGE: COPY copy-id '
行が EXPLAIN PACKAGE ステートメントの結果である場合。 copy-id は以下のいずれかの値です。
変更の開始CURRENT変更の終わり
変更の開始パッケージの現行コピー。変更の終わり
変更の開始PREVIOUS変更の終わり
変更の開始パッケージの直前のコピー。変更の終わり
変更の開始ORIGINAL変更の終わり
変更の開始パッケージのオリジナル・コピー。変更の終わり
変更の開始
変更の開始'EXPLAIN SDQ: copy-id-number '変更の終わり
変更の開始文字列コピーID番号は、以下の値のいずれかを取ることができます
変更の開始CURRENT変更の終わり
変更の開始現行コピー。変更の終わり
変更の開始無効変更の終わり
変更の開始無効なコピー。変更の終わり
変更の終わり
変更の終わり
PRIMARY_ACCESSTYPE CHAR(1) NOT NULL WITH DEFAULT 次のように、まず直接行アクセスを試行するかどうかを示します。
'D'
Db2 は、rowid 列で直接行アクセスの使用を試みる。 Db2 が実行時に rowid 列で直接行アクセスを使用できない場合は、PLAN_TABLEの ACCESSTYPE 列に記述されているアクセス・パスを使用する。
'P'
Db2 は、データにアクセスするためにデータ・パーティション副次索引と部分レベル操作を使用する。
変更の開始'S'変更の終わり
変更の開始Db2 横方向のテーブル参照に疎インデックスアクセスを使用した。変更の終わり
「T」
基本表または結果ファイルは、マテリアライズされて作業ファイルになり、その作業ファイルは、疎索引アクセスを介してアクセスされる。 基本表が含まれる場合、ACCESSTYPE は、その基本表がアクセスされる方法を示す。
ブランク
Db2 は、作業ファイルに rowid 列または疎索引アクセスを使用した直接行アクセスの使用を試行しない。 PLAN_TABLE の ACCESSTYPE 列の値は、表にアクセスする方式に関する情報を提供する。
PARENT_QBLOCKNO SMALLINT NOT NULL WITH DEFAULT 親照会ブロックの QBLOCKNO を示す番号。
TABLE_TYPE CHAR(1) 新規の表のタイプ:
'B'
SELECT from INSERT、SELECT from UPDATE、SELECT from MERGE、または SELECT from DELETE ステートメントのバッファー。
'C'
共通表式
「F」
表関数
'I'
新規表は IN リスト述部から生成される。 IN リスト述部が一致する述部として選択されている場合、これはメモリー内の表としてアクセスされる。
「M」
マテリアライズ照会表
「Q」
一時的な中間結果表 (マテリアライズされていない)。 ビューまたはネストされた表の式の名前の場合、値 Q は、マテリアライズが仮想であり、 実際のものでなかったことを示します。 マテリアライズが仮想になる可能性があるのは、分散されていない UNION ALL が、ビューまたはネストされた表の式の定義に含まれている場合 です。
'R'
再帰的共通表式
'S'
副照会 (相関または非相関)
「T」
テーブル
'W'
作業ファイル

照会で、暗黙的なソートを必要とする GROUP BY、ORDER BY、または DISTINCT を使用する場合、この列の値は NULL になります。

TABLE_ENCODE CHAR(1) NOT NULL WITH DEFAULT 表のコード化スキーム。 可能値は次のとおりです。
A
ASCII
「E」
EBCDIC
'U'
Unicode
「M」
表には複数の CCSID セットが入っています
TABLE_SCCSID SMALLINT NOT NULL WITH DEFAULT 表の SBCS CCSID 値。 列 TABLE_ENCODE が M の場合、この値は 0 です。
TABLE_MCCSID SMALLINT NOT NULL WITH DEFAULT 表の混合 CCSID 値。 TABLE_ENCODE 列の値が M の場合、この値は 0 です。 アプリケーションのデフォルトのモジュールで MIXED=NO の場合、この値は -2 です。
TABLE_DCCSID SMALLINT NOT NULL WITH DEFAULT 表の DBCS CCSID 値。 TABLE_ENCODE 列の値が M の場合、この値は 0 です。 アプリケーションのデフォルトのモジュールで MIXED=NO の場合、この値は -2 です。
ROUTINE_ID INTEGER NOT NULL WITH DEFAULT この列の値は IBM 専用です。
CTEREF SMALLINT NOT NULL WITH DEFAULT 参照される表が共通表式の場合、この値は、最上位照会ブロック番号です。
STMTTOKEN VARCHAR(240) ユーザー指定ステートメント・トークン。
PARENT_PLANNO SMALLINT NOT NULL 相関副照会が呼び出される親照会ブロックのプラン番号に相当します。 または、非相関副照会の場合は、副照会の作業ファイルを表す、親照会ブロック内のプラン番号に相当します。
BIND_EXPLAIN_ONLY CHAR(1) NOT NULL WITH DEFAULT コマンドで EXPLAIN(ONLY) オプションを指定したために行が挿入されたかどうかを示します。
SECTNOI INTEGER NOT NULL WITH DEFAULT ステートメントのセクション番号。 値は SYSPACKSTMT または SYSSTMT の表の同じ列から取得され、表を結合してそのステートメントのアクセス・パスを再構成するために使用することができる。 この列は静的ステートメントのみに適用される。 -1 のデフォルト値は、 DB2 9 またはそれ以前で取得されたEXPLAIN情報を示します。
EXPLAIN_TIME timestamp not null、デフォルト EXPLAIN 情報が収集された時刻:
キャッシュされたすべてのステートメント
フル精度のタイム・スタンプ値形式での、ステートメントがキャッシュに入れられた時点。
キャッシュされていない静的ステートメント
フル精度のタイム・スタンプ値形式での、ステートメントがバインドされた時点。
キャッシュされていない動的ステートメント
時刻の CHAR(16) 表現に相当する値に 4 つのゼロが付加された形式での、EXPLAIN が実行された時点。
MERGC CHAR(1) NOT NULL WITH DEFAULT 結合前に複合表が統合されるかどうかを示します。
「Y」
はい
「N」
いいえ
MERGN CHAR(1) NOT NULL WITH DEFAULT 新しいテーブルが結合前に連結されているか、またはデータパーティショニングされたセカンダリインデックス(DPSI)を使用したアクセスにマージ操作が関与しているかどうかを示します。
「Y」
はい、結合前に新規表は統合されます。
「N」
いいえ、結合前に新規表は統合されません。
'D'
DPSI を使用したアクセスはマージ操作に関係しています。
'U'
DPSI を使用したアクセスはマージ操作に関係していません。
SCAN_DIRECTION CHAR(1) 索引アクセスの場合、索引スキャンの方向は次のようになります。
「F」
順方向
'R'
逆方向
ブランク
索引スキャンは使用されません。
EXPANSION_REASON CHAR(2) NOT NULL WITH DEFAULT
この列は、アーカイブ表またはテンポラル表を参照するステートメントのみに適用されます。 他のステートメントについては、この列はブランクです。

CURRENT TEMPORAL BUSINESS_TIME 特殊レジスター、CURRENT TEMPORAL SYSTEM_TIME 特殊レジスター、および SYSIBMADM.GET_ARCHIVE 組み込みのグローバル変数の効果を示します。 これらの項目は、BUSTIMESENSITIVE、SYSTIMESENSITIVE、および ARCHIVESENSITIVE バインド・オプションによって制御されます。

以下の条件のいずれかに該当する場合、Db2 は特定の構文を暗黙的に照会に追加します。
  • SYSIBMADM.GET_ARCHIVE グローバル変数が Y に設定され、ARCHIVESENSITIVE バインド・オプションが YES に設定されている。
  • CURRENT TEMPORAL BUSINESS_TIME 特殊レジスターが非 NULL であり、BUSTIMESENSITIVE バインド・オプションが YES に設定されている。
  • CURRENT TEMPORAL SYSTEM_TIME 特殊レジスターが非 NULL であり、SYSTIMESENSITIVE バインド・オプションが YES に設定されている。
拡張理由 (続き)  
この列は、次のいずれかの値を取ります。
A
照会には、SYSIBMADM.GET_ARCHIVE 組み込みグローバル変数の結果として暗黙照会変換が含まれています。
'B'
照会には、CURRENT TEMPORAL BUSINESS_TIME 特殊レジスターの結果として暗黙照会変換が含まれています。
'S'
照会には、CURRENT TEMPORAL SYSTEM_TIME 特殊レジスターの結果として暗黙照会変換が含まれています。
'SB'
照会には、CURRENT TEMPORAL SYSTEM_TIME 特殊レジスターと CURRENT TEMPORAL BUSINESS_TIME 特殊レジスターの結果として暗黙照会変換が含まれています。
ブランク
照会には暗黙照会変換が含まれません。
変更の開始 PER_STMT_ID 変更の終わり 変更の開始 bigint not null 変更の終わり 変更の開始 Db2 カタログテーブル内のSQLステートメントの永続的なステートメント識別子。
例えば、この列は、SQL ステートメントを識別する以下のカタログ表の列に対応します。
  • STMT_ID in SYSIBM.SYSPACKSTMT (パッケージ内の SQL ステートメントの場合)
  • SDQ_STMT_ID in SYSIBM.SYSDYNQUERY (固定化された動的 SQL ステートメントの場合)。
変更の終わり
変更の開始AP_PLANID変更の終わり 変更の開始CHAR(16) FOR BIT DATA変更の終わり 変更の開始拡張タイムスタンプ値の形式で、SQL文のBINDまたはPREPARE最適化用の一意の識別子。変更の終わり
注:
  1. ACCESSTYPE='A' および QBLOCK_TYPE='SELECT' が示されている PLAN_TABLE 行の場合、QUERYNO、APPLNAME、および PROGNAME を除く他のすべての列の値は、これらの列のデフォルト値です。
  2. 最適化ヒントに使用される行では、次の行に NULL 値があると、並列処理を使用しないヒントであることが示されます。
    • PARALLELISM_MODE
    • ACCESS_PGROUP_ID
    • JOIN_PGROUP_ID
  3. 最適化ヒントに使用される行では、次の行に NULL 値があると、並列ソートを使用しないヒントであることが示されます。
    • SORTN_PGROUP_ID
    • SORTC_PGROUP_ID
  4. Db2 は、EXPLAIN(ONLY) オプションが指定され、アクセス・パスの再使用または比較が失敗する場合には、バインドまたは再バインドで REMARKS 列に値を挿入します。 この値には以下の情報が含まれている可能性があります。
    • 再利用に失敗した際に SQLCODE +395 の理由コードに対応する理由コード
    • 比較が失敗した、一致しない PLAN_TABLE 列の名前
    • 変更の開始ストリング「UNMATCHED ROW(S)」は、元のアクセス・パスの行に行が追加されているか、元のアクセス・パスよりも行が少ないことを示します。変更の終わり

    変更の開始再使用または比較の失敗の結果として REMARKS 列にある値は、すべてのアクセス・パスの相違を表すわけではありません。 REMARKS 値は、アクセス・パスの変更が許容できるかどうかを判別するためには不十分です。 これらは、アクセス・パスの変更方法の判別にさらに分析が必要となる可能性があること、また、変更によってそれ以上のアクションが必要になるかどうかを示します。変更の終わり

  5. Db2 は、選択度オーバーライドをステートメントに使用できないときに REMARKS 列に値を挿入します。 この値には、選択度のオーバーライドが使用されなかった理由を示す理由コードが含まれます。 この値には追加の診断情報が含まれる場合もあります。

    コード値がSQLCODE +395 の理由コードに対応する理由:

    '1'-'41'
    拡張最適化プロセスの一環として生成された最適化ヒントを適用できないことを示します。 単一の選択度インスタンスのみを使用してください。
    '42'
    選択度のオーバーライドの構造が無効であることを示します。 選択度のオーバーライドを再度生成してください。
    '43'
    選択度のオーバーライドは予期しないエラーのため適用できません。 それでも問題が解決しない場合は、 IBM サポートまでご連絡ください。
    '44'-'99'
    拡張最適化プロセスの一環として生成された最適化ヒントを適用できないことを示します。 単一の選択度インスタンスのみを使用してください。

PLAN_TABLE_HINT_IX 索引

PLAN_TABLE_HINT_IX 索引は、アクセス・パス・ヒント使用時の準備パフォーマンスを向上させます。 この索引は、ステートメント・レベルのアクセス・パスおよび最適化パラメーターに必要です。 PLAN_TABLE アクセス・パス・ヒントの場合、PLAN_TABLE_HINT_IX 索引はオプションですが、使用することを強くお勧めします。

PLAN_TABLE_HINT_IX 索引を作成するステートメントは、SDSNSAMP ライブラリーの DSNTESC メンバーの一部として組み込まれています。プログラム固有のプログラミングインターフェース情報を終了します。