アクセス・パスに影響を与える方式の相互作用

アクセス・パスの選択に影響を与えるステートメント・レベルの方式と PLAN_TABLE 最適化のヒントを組み合わせて、同じステートメントに対して使用することができます。 ただし、いくつかの制約事項が適用されます。

一致するステートメントのアクセス・パスに影響を与えるカタログ表の行は、同じステートメントに適用される PLAN_TABLE 最適化ヒントと共存できます。 Db2 また、バインドまたはリバインド時にアクセスパスの再利用を指定すると、同じカタログテーブルの行が作成および使用されます。

アクセス・パスに影響を及ぼす各種方式は共存が可能です。 しかし、 Db2 は1つの方法のみを適用します。 複数の共存する方式が同じステートメントに適用できる場合、適用される最初のヒントだけが使用されます。その場合の優先順位を以下に示します。
  1. PLAN_TABLE アクセス・パスのヒント
  2. 特定のバージョン、コレクション、パッケージのステートメント・レベルのアクセス・パスまたはパラメーター。
  3. 特定のコレクションおよびパッケージのステートメント・レベルのアクセス・パスまたはパラメーター。
  4. システム全体が有効範囲である、ステートメント・レベルのアクセス・パスまたはパラメーター。
  5. Db2 によって内部的に作成される、アクセスパスの再利用のためのステートメントレベルのアクセスパス
  6. ステートメント・レベルの述部選択度のオーバーライド。

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」に設定する必要があります。 次の表に有効な組み合わせを要約します。

表 1. DSN_USER_QUERY_TABLE 内のヒント・タイプ列の有効な組み合わせの要約
組み合わせ結果
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'
ステートメント・レベルのアクセス・パスは、同じアプリケーション・コンテキストの同じ SQL ステートメントのアクセス・パスに影響を与えるその他のステートメント・レベルの方式と組み合わせて指定することはできません。 しかし、同じアプリケーションコンテキスト内の同じステートメントに対しては、述語の選択性を上書きし、ステートメントレベルの最適化パラメータを指定することができます。
  • 述部の選択度をオーバーライドする。
  • ステートメント・レベルの最適化パラメーターを指定する。
  • ステートメント・レベルのアクセス・パスを指定する。
BIND QUERYコマンドを発行すると、Db2は、同じアプリケーション・コンテキスト内の同じステートメントに適用される既存の SYSIBM.SYSQUERYカタログ表の行を置き換えます。

例えば、SYSIBM.SYSQUERY カタログ表に、以下のように、ステートメント・テキストが SQL-text でスキーマが S1 のステートメントを指定する行が既に含まれているとします。

STMTTEXT  SCHEMA  PACKAGE
SQL-text  S1        

DSN_USERQUERY 表に、次のような指定された行が含まれている場合に、BIND QUERY コマンドを順次発行すると想定します。

  1. SQL-text のみを指定する行。 Db2 既存の行を置き換えます。 スキーマ固有のカタログ表の行は、一致するステートメントのグローバル行によって置き換えられます。 SYSIBM.SYSQUERY 表には引き続き 1 行のみが含まれます。
    STMTTEXT  SCHEMA  PACKAGE
    SQL-text              
  2. SQL-text および S2 スキーマを指定する行。 グローバル・カタログ表の行は、新しいスキーマ固有の行によって置き換えられます。 SYSIBM.SYSQUERY 表には以下のように 1 行のみが含まれるようになります。
    STMTTEXT  SCHEMA  PACKAGE
    SQL-text  S2          
  3. SQL-text および S1 スキーマを指定する行。 新しい行が挿入され、既存の行は置き換えられません。 SYSIBM.SYSQUERY 表には以下のように 2 行が含まれるようになります。
    STMTTEXT  SCHEMA  PACKAGE
    SQL-text  S2          
    SQL-text  S1          
  4. SQLテキスト、S1スキーマおよびP1パッケージを指定する行。 SYSIBM.SYSQUERY テーブルには現在、3つの行が含まれています。
  5. 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