SET CURRENT EXPLAIN MODE ステートメント

SET CURRENT EXPLAIN MODE ステートメントは、 CURRENT EXPLAIN MODE 特殊レジスターの値を変更します。 このステートメントは、トランザクションの制御下にはありません。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込むか、あるいは対話式に発行することができます。 このステートメントは、動的に作成できる実行可能ステートメントです。

許可

必要ありません。

構文

Read syntax diagramSkip visual syntax diagramSET CURRENT EXPLAIN MODE = NOYESEXPLAINNORCACREOPTRECOMMEND INDEXESEVALUATE INDEXESRECOMMEND PARTITIONINGSEVALUATE PARTITIONINGShost-variable

説明

いいえ
Explain 機能を使用不可にします。 Explain 情報はキャプチャーされません。 NO は、特殊レジスターの初期値です。
はい
Explain 機能を使用可能にし、 適格な動的 SQL ステートメントについての Explain 情報を Explain 表に挿入します。 すべての動的 SQL ステートメントが、通常どおりにコンパイルおよび実行されます。
EXPLAIN
Explain 機能を使用可能にし、 準備される適切な動的 SQL ステートメントについての Explain 情報をキャプチャーします。 ただし、動的ステートメントは実行されません。
EXPLAIN NORCAC
Explain 機能を使用可能にし、行アクセス制御または列アクセス制御 (RCAC) がアクティブ化されていない場合と同様の方法で 準備される適格な動的 SQL ステートメントについての Explain 情報をキャプチャーします。 動的ステートメントは実行されません。 この Explain モードを設定するとき、Explain 機能は RCAC が存在しない場合と同様にプランを Explain します。
REOPT
Explain 機能を使用可能にし、実行時のステートメント再最適化の際 (すなわち、ホスト変数、特殊レジスター、グローバル変数、またはパラメーター・マーカーの実際の値が使用可能になるとき) に、静的または動的 SQL ステートメントについての Explain 情報がキャプチャーされるようにします。
RECOMMEND INDEXES
SQL コンパイラーが索引を推奨できるようにします。 この Explain モードで実行される照会はすべて、 推奨された索引を ADVISE_INDEX 表に埋め込みます。 さらに、推奨された索引を使用する方法を示すため、 Explain 表に Explain 情報がキャプチャーされますが、 そのステートメントのコンパイルや実行は行われません。
EVALUATE INDEXES
動的照会のための仮想推奨索引を SQL コンパイラーが評価できるようにします。 この Explain モードで実行される照会は、仮想索引に基づいて作られた統計を使用してコンパイルおよび最適化されます。 ステートメントは実行されません。 USE_INDEX 列が Y に設定されている場合、評価される索引は ADVISE_INDEX 表から読み取られます。 USE_INDEX 列を I に設定し、EXISTS 列を Y に設定することによって、既存の非ユニーク索引を無視することもできます。 USE_INDEX=I と EXISTS=N の組み合わせが指定された場合、照会の索引評価は正常に行われますが、問題となっている索引は無視されません。
RECOMMEND PARTITIONINGS
特定の照会がアクセスするそれぞれの表ごとに、 コンパイラーが最良のデータベース・パーティションを推奨するように指定します。 それから、最良のデータベース・パーティションは ADVISE_PARTITION 表に書き込まれます。 照会は実行されません。
EVALUATE PARTITIONINGS
ADVISE_PARTITION 表に指定された仮想データベース・パーティションを使って、 コンパイラーが照会の推定パフォーマンスを取得するように指定します。
host-variable
host-variable (ホスト変数) のデータ・タイプは CHAR または VARCHAR でなければならず、 その内容の長さは 254 を超えてはなりません。 それより長いフィールドを指定すると、エラーになります (SQLSTATE 42815)。 指定する値は、NO、 YES、EXPLAIN、RECOMMEND INDEXES、 または EVALUATE INDEXES でなければなりません。 実際に指定する値が、指定した置換値より大きい場合は、 入力の右側にブランクを入れる必要があります。 先行ブランクは使用できません (SQLSTATE 42815)。 すべての入力値は、大文字小文字を区別しないものとして処理されます。 host-variable が標識変数を伴う場合、 その標識変数の値は NULL 値以外でなければなりません (SQLSTATE 42815)。

  • Explain 機能は、データの取り込み先である Explain 表を修飾するときに、スキーマとして以下の ID を使用します。
    • 動的 SQL のセッション許可 ID
    • 静的 SQL のステートメント許可 ID
    そのスキーマは、一連の Explain 表に関連付けられている場合もあれば、別のスキーマの下で一連の Explain 表を参照する別名に関連付けられている場合もあります。 そのスキーマの下で Explain 表が検出されなかった場合、Explain 機能は、SYSTOOLS スキーマの下に Explain 表があるかどうかをチェックし、その表を使用しようとします。
  • 静的 SQL ステートメントの Explain 情報は、 PREP または BIND コマンドの EXPLAIN オプションを使用してキャプチャーできます。 EXPLAIN オプションの ALL の値が指定され、CURRENT EXPLAIN MODE のレジスター値が NO の場合には、実行時に動的 SQL ステートメントの Explain 情報がキャプチャーされます。 CURRENT EXPLAIN MODE レジスターの値が NO 以外の場合、EXPLAIN BIND オプションの値は無視されます。
  • RECOMMEND INDEXES と EVALUATE INDEXES は特殊モードで、 それらを設定するために使えるのは SET CURRENT EXPLAIN MODE ステートメントだけです。 これらのモードは PREP または BIND オプションを使って設定することはできません。 また、SET CURRENT EXPLAIN SNAPSHOT ステートメントを使用しても動作しません。
  • Explain 機能が活動化される場合、 現行の許可 ID に Explain 表に対する INSERT 特権が必要です。 この特権がない場合には、エラー (SQLSTATE 42501) が発生します。
  • ルーチンから SQL ステートメントの Explain 情報を取り出す場合は、 MODIFIES SQL DATA の SQL データ・アクセス標識を指定して、 ルーチンを定義しなければなりません (SQLSTATE 42985)。
  • 特殊レジスターが REOPT に設定され、実行時の再最適化のために SQL ステートメントが修飾されない場合 (すなわち、ステートメントが入力変数を持っていないか、REOPT BIND オプションが NONE に設定されている場合) は、Explain 情報はキャプチャーされません。 REOPT BIND オプションが ONCE に設定されている場合、Explain 情報は、ステートメントが最初に再最適化されるときの 1 回だけキャプチャーされます。 ステートメントがキャッシュに入れられた後は、後続の実行では、 それ以上の Explain 情報はこのステートメントに関して獲得されません。
  • Explain 機能が使用可能で、REOPT BIND オプションが ONCE に設定されていて、既にキャッシュに入れられている SQL ステートメントを実行しようとした場合は、入力変数の現行値を使ってステートメントがコンパイルおよび再最適化され、それにしたがって Explain 表にデータが取り込まれます。 このステートメントのために新たに生成されるアクセス・プランは、 キャッシュに入れられず、実行されません。 このキャッシュ・ステートメントを並行して実行する他のアプリケーションは引き続き稼働し、 このステートメントを実行するための新しい要求は、 既にキャッシュに入れられたアクセス・プランを採用します。
  • 静的または動的 SQL ステートメントが入力変数を持っていて、REOPT BIND オプションが ONCE または ALWAYS に設定されている場合は、CURRENT EXPLAIN MODE および CURRENT EXPLAIN SNAPSHOT 特殊レジスターの REOPT という値は、EXPLAIN および EXPLSNAP BIND オプションの値をバインド時にオーバーライドします。
  • EXPLAIN 表で定義される行レベルおよび列レベルのアクセス制御 (RCAC) は、その他の通常の表と同様に、これらの表へのユーザー・アクセス権限に適用されます。 ただし、EXPLAIN 表の行レベルおよび列レベルのアクセス制御は、データベース自体がそれらの EXPLAIN 表にデータを設定するときは、適用されません。 これは、内部ハウスキーピングと見なされ、内部 SQL のように RCAC の影響を受けることはありません。

次のステートメントでは、 以降の適格な動的 SQL ステートメントの Explain 情報をキャプチャーし、 そのステートメントが実行されないように、 CURRENT EXPLAIN MODE 特殊レジスターを設定しています。
   SET CURRENT EXPLAIN MODE = EXPLAIN