アクセス・パスに影響を与える方式の相互作用
アクセス・パスの選択に影響を与えるステートメント・レベルの方式と PLAN_TABLE 最適化のヒントを組み合わせて、同じステートメントに対して使用することができます。 ただし、いくつかの制約事項が適用されます。
一致するステートメントのアクセス・パスに影響を与えるカタログ表の行は、同じステートメントに適用される PLAN_TABLE 最適化ヒントと共存できます。 Db2 また、バインドまたはリバインド時にアクセスパスの再利用を指定すると、同じカタログテーブルの行が作成および使用されます。
- PLAN_TABLE アクセス・パスのヒント
- 特定のバージョン、コレクション、パッケージのステートメント・レベルのアクセス・パスまたはパラメーター。
- 特定のコレクションおよびパッケージのステートメント・レベルのアクセス・パスまたはパラメーター。
- システム全体が有効範囲である、ステートメント・レベルのアクセス・パスまたはパラメーター。
- Db2 によって内部的に作成される、アクセスパスの再利用のためのステートメントレベルのアクセスパス
- ステートメント・レベルの述部選択度のオーバーライド。
BIND QUERY コマンドを発行する際に、ステートメント・レベルのアクセス・パスは、同じアプリケーション・コンテキスト (スキーマおよびパッケージ) の同じ SQL ステートメントに対する他の方式 (最適化パラメーターまたは選択度のオーバーライド) と共存させることはできません。 以下の DSN_USERQUERY_TABLE 列で、BIND QUERY コマンドの発行時に作成されるヒントのタイプを制御します。
- SELECTIVITY_OVERRIDE
- ACCESSPATH_HINT
- OPTION_OVERRIDE
BIND QUERY コマンドの発行時に ACCESSPATH_HINT または OPTION_OVERRIDE のいずれかの列がブランクである場合は、両方をブランクにする必要があります。 ブランク値は互換性を保つためにサポートされます。 しかし、ブランク値を使用しないことをお勧めします。 これらの値がブランクの場合、Db2は、いくつかの入力表のデータを使用して、カタログ表へのデータの取り込み方法を決定します。 結果の予測は、場合によっては (特に EXPLAIN 出力表を使用する場合には) 困難になる場合があります。 これらの列の値を指定した場合、SELECTIVITY_OVERRIDE 列と OPTION_OVERRIDE 列には同時に「Y」値を含めることができます。 ただし、これらの値のいずれかが「Y」の場合、ACCESSPATH_HINT は「N」でなければなりません。 同様に、ACCESSPATH_HINT が「Y」に設定されている場合は常に、他の 2 つの列の両方を「N」に設定する必要があります。 次の表に有効な組み合わせを要約します。
| 組み合わせ結果 | ACCESSPATH_
HINT列 |
OPTION_
OVERRIDE 列 |
SELECTIVITY_
OVERRIDE 列 |
|---|---|---|---|
| アクセス・パスを指定 | 'Y' | 'N' | 'N' |
| アクセス・パスを指定 | 'Y' | ブランク | 'N' |
| オプションと選択度の行を指定 | 'N' | 'Y' | 'Y' |
| オプションのオーバーライドのみを指定。 | 'N' | 'Y' | 'N' |
| 選択度のオーバーライドのみを指定。 | 'N' | 'N' | 'Y' |
| 他の列の値に応じて、オプションのオーバーライドを指定する場合があります | 'N' | ブランク | 'Y' または 'N' |
| 他の列と PLAN_TABLE の値に応じて、アクセス・パスおよび最適化パラメーターを指定する場合があります。 アクセス・パスは、他の方式よりも優先されます。 選択度のオーバーライドは指定されません。 この組み合わせは互換性を保つために提供されています。 ただし、新しいヒントまたはオーバーライドを作成する場合は、これらの各列の値を指定することが最適です。 |
ブランク | ブランク | 'N' |
- 述部の選択度をオーバーライドする。
- ステートメント・レベルの最適化パラメーターを指定する。
- ステートメント・レベルのアクセス・パスを指定する。
例えば、SYSIBM.SYSQUERY カタログ表に、以下のように、ステートメント・テキストが SQL-text でスキーマが S1 のステートメントを指定する行が既に含まれているとします。
STMTTEXT SCHEMA PACKAGE
SQL-text S1 DSN_USERQUERY 表に、次のような指定された行が含まれている場合に、BIND QUERY コマンドを順次発行すると想定します。
- SQL-text のみを指定する行。 Db2 既存の行を置き換えます。 スキーマ固有のカタログ表の行は、一致するステートメントのグローバル行によって置き換えられます。 SYSIBM.SYSQUERY 表には引き続き 1 行のみが含まれます。
STMTTEXT SCHEMA PACKAGE SQL-text - SQL-text および S2 スキーマを指定する行。 グローバル・カタログ表の行は、新しいスキーマ固有の行によって置き換えられます。 SYSIBM.SYSQUERY 表には以下のように 1 行のみが含まれるようになります。
STMTTEXT SCHEMA PACKAGE SQL-text S2 - SQL-text および S1 スキーマを指定する行。 新しい行が挿入され、既存の行は置き換えられません。 SYSIBM.SYSQUERY 表には以下のように 2 行が含まれるようになります。
STMTTEXT SCHEMA PACKAGE SQL-text S2 SQL-text S1 - SQLテキスト、S1スキーマおよびP1パッケージを指定する行。 SYSIBM.SYSQUERY テーブルには現在、3つの行が含まれています。
- SQL-text、S1 スキーマ、および P2 パッケージを指定する行。 Db2 新しい行が挿入されます。 SYSIBM.SYSQUERY テーブルには現在、4つの行が含まれています。
STMTTEXT SCHEMA PACKAGE SQL-text S2 SQL-text S1 SQL-text S1 P1 SQL-text S1 P2