Explain インスタンスの概念について、 すべての Explain 情報が編成されています。 Explain インスタンスは 1 つまたは複数の SQL ステートメントごとに、 1 回の Explain 機能の呼び出しを示します。 Explain インスタンスは次の事柄に関する Explain 情報を示します。
1 つの Explain インスタンス内で獲得された Explain 情報には、 SQL コンパイル環境ならびにコンパイルされる SQL ステートメントを実行するために選ばれたアクセス・プランが入っています。 Explain 情報は次の 3 つのサブセットに編成されます。
Explain インスタンス情報は EXPLAIN_INSTANCE 表に保管されます。 Explain インスタンスの内部で Explain が実行された各 SQL ステートメントに関する特定の付加的な情報は、 EXPLAIN_STATEMENT 表に保管されます。
Explain インスタンスの識別: 以下の情報を用いると、 それぞれの Explain インスタンスを固有に識別し、 SQL ステートメントの情報をこの機能の特定の呼び出しに関連づけることができます。
環境設定: SQL コンパイラーが照会をどのように最適化したかに関係する環境情報が取得されます。 環境情報には、以下のものが含まれます。
SQL ステートメントの識別: Explain インスタンスごとに、 複数の SQL ステートメントに Explain が実行される場合があります。 Explain インスタンスを固有に識別する情報に加えて、 次の情報は個々の SQL ステートメントをそれぞれ識別するのに役に立ちます。
EXPLAIN_STATEMENT 表では、QUERYTAG フィールドと QUERYNO フィールドが識別子を含み、 Explain 処理の一部として設定されます。
CLP または CLI セッション中に実行依頼された動的 Explain SQL ステートメントの場合、 EXPLAIN MODE または EXPLAIN SNAPSHOT が活動状態になっていると、 QUERYTAG が "CLP"か "CLI" に設定されます。 これが起こると、各ステートメントごとに 1 かそれ以上ずつ大きくなっている番号の省略時値が QUERYNO になります。
その他の動的 Explain SQL ステートメント (CLP、CLI 以外から、 または EXPLAIN SQL ステートメントを使用) の場合は、 QUERYTAG がブランクに設定され、QUERYNO が常に "1" になります。
コスト見積もり: Explain が実行されたステートメントごとに、 選択されたアクセス・プランを実行するのに要する相対コストの見積もりが記録されます。 このコストはタイマーオン という架空の相対的な計測単位を用いて指定します。 経過時間の見積もりは、次の理由で提供されません。
ステートメント・テキスト: Explain が実行されたステートメントごとに、 SQL ステートメントのテキストが 2 つのバージョンで記録されます。 1 つ目のバージョンは SQL コンパイラーが受け取ったテキストです。 2 つ目のバージョンは、 照会の内部コンパイラー表示から逆変換されたバージョンのステートメント・テキストです。 この変換は他の SQL ステートメントに似ているように見えますが、 必ずしも正しい SQL 構文に従っているわけでも、 内部表示の実際の内容を全体として反映しているわけでもありません。 この変換は、単に、 SQL 最適化プログラムがアクセス・プランを選択する元となる SQL コンテキストを理解できるようにするために提供されています。 ユーザー作成のステートメント・テキストを SQL ステートメントの内部表示と比較すると、 最適化を向上させるために SQL コンパイラーが再書き込みされた方法を理解するのに役に立ちます。 (SQL コンパイラーによる照会書き直しを参照してください。) さらに、トリガーや制約などのステートメントに影響を及ぼす、 環境内の他の要素も示します。 この "最適化された" テキストが使用するキーワードの一部は、 以下のようなものです。
Explain スナップショットが要求されると、 SQL 最適化プログラムが選択したアクセス・プランを説明する付加的な Explain 情報が記録されます。 この情報は、Visual Explain が求める書式で EXPLAIN_STATEMENT 表の SNAPSHOT 列に保管されます。 この書式は他のアプリケーションでは使用できません。
Explain スナップショット情報の内容に関する付加的な情報は、 Visual Explain 自体と次の箇所から使用できます。
Explain 表情報が要求されると、 SQL 最適化プログラムが選択したアクセス・プランを説明する付加的な情報が記録されます。 この情報は以下の Explain 表に保管されます。
上記の表すべてが省略時に作成されるわけではありません。 それらの表は、 sqllib サブディレクトリーの misc サブディレクトリーにある EXPLAIN.DDL スクリプトを実行することにより、 作成することができます。 Explain 表および Advise 表が要求されているデータベースに接続してください。 それからコマンド db2 -tf EXPLAIN.DDL を発行すると表が作成されます。 必要に応じて、「索引 (Index)」ウィザードで表を自動的に作成することもできます。
Visual Explain の長方形の オブジェクト・ノードは、 EXPLAIN_OBJECT 表の行に対応します。 Visual Explain の八角形の "演算子" ノードは、 EXPLAIN_OPERATOR 表の行に対応します。 演算子間または演算子のオブジェクト間の各リンクは、 EXPLAIN_STREAM 表の行に対応します。
Explain 表情報は Explain スナップショットについて記録された情報によく似ていますが、 この情報は標準 SQL ステートメントを用いてアクセスできる通常のリレーショナル表に保管されます。
Visual Explain アクセス・プラン・グラフと同様に、 Explain 表は、 アクセス・プラン内の演算子とデータ・オブジェクトの間の関連を反映するように設計されています。 次の図は、これらの表の間の関連を示します。
図 87. Explain 表の関連についての概要 (全部の表が示されているわけではありません)
![]() |
複数のユーザーが共通に使用する Explain 表を持つことができます。 Explain 表は、1 人のユーザーに対して定義可能です。 追加のユーザーごとに、 定義された表を示す名前と同じ名前を使用して別名を定義することができます。 共通の Explain 表を共有する各ユーザーには、 それらの表に対する挿入許可が必要です。
Explain 表および表の作成方法の詳細については、 付録 H, SQL EXPLAIN ツールを参照してください。 Explain 表情報の内容に関する付加的な情報は、次の箇所から使用できます。
sqllib ディレクトリーの misc サブディレクトリーで提供された db2exfmt ツールを使用して、 Explain 表の内容を読みやすい編成出力にフォーマットすることができます。