DB2 for Linux, UNIX, and Windows 上のアクセス・プラン用のアクセス・プラン・エクスプローラーに表示される演算子

以下の演算子は、DB2® for Linux, UNIX, and Windows で実行される SQL ステートメントのアクセス・プランを分析する際に、アクセス・プラン・エクスプローラーに表示されます。
削除

この演算子は、必要な操作を表します。アクセス・プランのコストを改善するには、削除する行のセットを定義するその他のノード (スキャンや結合など) に注意を向けてください。

パフォーマンスについての提案: 表からすべての行を削除する場合は、DROP TABLE ステートメントまたは LOAD REPLACE コマンドを使用することを検討してください。

ユーザー定義索引スキャン
このスキャンでは、ユーザー提供の範囲プロデューサー関数から複数の開始と停止の条件を使用します。 この操作は、オプティマイザーが (述部に基づいて) 基本表にアクセスする前に、条件を満たす行のセットを絞り込むために実行されます。
パフォーマンスについての提案:
  • データベースの更新を繰り返すと、索引のフラグメント化を引き起こし、結果として必要以上に索引ページが多くなる場合があります。これは、索引を削除して再作成するか、索引を再編成することで修正できます。
  • 統計が最新でない場合は、RUNSTATS コマンドを使用して統計を更新してください。
フェッチ
この演算子は、特定の行 ID (RID) を使用して表から列を取り出すことを表します。
フィルター・データ
この演算子は、述部によって提供される基準に基づいてデータをフィルターに掛けるために、残余述部を適用することを表します。
表の行の生成
この演算子は、表、索引、または演算子からの入力を使用しないで行の表を生成する組み込み関数を表します。
グループ化の基準
この演算子は、指定された列または関数の共通値に基づいて行をグループ化することを表します。この操作は、値のグループを生成したり、集合関数を評価したりするために必要です。 GROUP BY 列が指定されていない場合でも、SELECT リストに集約関数が含まれていれば、この演算子を使用できます。集約関数の存在は、オプティマイザーが集約を行うときに表全体を単一グループとして扱うことを示します。
パフォーマンスについての提案:
  • アクセス・プランのコストを改善するには、グループ化する行のセットを定義するその他のノード (スキャンや結合など) に注意を向けてください。
  • 単一の集約関数を含むが GROUP BY 節を含まない SELECT ステートメントのパフォーマンスを向上させるには、以下のことを試みてください。
    • MIN(C) 集約関数の場合は、C に昇順索引を作成します。
    • MAX(C) 集約関数の場合は、C に降順索引を作成します。
ハッシュ結合
この演算子は、ハッシュ結合を表します。この結合により、表の中の条件を満たす行がハッシュされ、表の内容を事前に順序付けすることなく直接結合できるようになります。

1 つの FROM 節内で複数の表が参照される場合は、常に結合が必要です。2 つの異なる表からの列を等価にする結合述部が存在する場合、常にハッシュ結合が可能です。結合述部は、正確に同じデータ・タイプである必要があります。 ネスト・ループ結合の場合と同様に、ハッシュ結合は書き直された副照会から生じることもあります。

ハッシュ結合では、入力表が配列されている必要はありません。結合の実行は、ハッシュ結合の内部表をスキャンし、結合列値をハッシュして参照表を生成することにより実行されます。 その後、結合列の値をハッシュして、内部表について生成された参照表をチェックしながら、外部表の読み取りが実行されます。

パフォーマンスについての提案:

  • 結合される行の数を削減するために、ローカル述部 (つまり、1 つの表を参照する述部) を使用してください。
  • ソート・ヒープのサイズを大きくして、メモリー内にハッシュ参照表を保持できる大きさにしてください。
  • 統計が最新でない場合は、RUNSTATS コマンドを使用して統計を更新してください。
挿入

この演算子は、必要な操作を表します。アクセス・プランのコストを改善するには、削除する行のセットを定義するその他のノード (スキャンや結合など) に注意を向けてください。

索引の論理積
この演算子は、動的ビットマップ技法を使用して複数の索引スキャンの結果を ANDing することを表します。この操作は、基礎表へのアクセスを最小限に削減するために、ANDing された述部を複数の索引に適用できるようにします。
この操作は、以下の目的で実行されます。
  • 基本表にアクセスする前に行のセットを絞り込む。
  • 複数の索引に適用される述部を ANDing する。
  • スター型結合に使用される準結合の結果を ANDing する。
パフォーマンスについての提案:
  • データベースの更新を繰り返すと、索引のフラグメント化を引き起こし、結果として必要以上に索引ページが多くなる場合があります。これは、索引を削除して再作成するか、索引を再編成することで修正できます。
  • 統計が最新でない場合は、RUNSTATS コマンドを使用して更新します。
  • 一般に、索引スキャンは、条件を満たす行の数がわずかな場合に最も効果的です。 条件を満たす行の数を見積もるために、オプティマイザーは、述部で参照される列に対して使用可能な統計を使用します。 一部の値が他の値よりも頻繁に発生する場合、RUNSTATS コマンドで WITH DISTRIBUTION 節を使用して分散統計を要求することが重要です。オプティマイザーは、不均一分散統計を使用することで、発生頻度の高い値と低い値とを区別できます。
  • この操作には開始キーと停止キーが不可欠であるため、この操作は単一列索引を最大限に活用できます。
索引スキャン
この演算子は、生成される行 ID ストリームを削減するために、索引をスキャンすることを表します。スキャンでは、オプションの開始条件および停止条件を使用したり、索引の列を参照する索引付け可能述部に適用したりできます。

この操作は、(述部に基づいて) 基本表にアクセスする前に、条件を満たす行 ID のセットを絞り込むために実行されます。

パフォーマンスについての提案:
  • データベースの更新を繰り返すと、索引のフラグメント化を引き起こし、結果として必要以上に索引ページが多くなる場合があります。これは、索引を削除して再作成するか、索引を再編成することで修正できます。
  • 2 つ以上の表がアクセスされる場合、外部表の結合列に索引を提供することによって、索引を介した内部表へのアクセスをより効率的に行えます。
  • 統計が最新でない場合は、RUNSTATS コマンドを使用して更新します。
  • 一般に、索引スキャンは、条件を満たす行 ID の数がわずかな場合に最も効果的です。 条件を満たす行 ID の数を見積もるために、オプティマイザーは、述部で参照される列に対して使用可能な統計を使用します。 一部の値が他の値よりも頻繁に発生する場合、RUNSTATS コマンドで WITH DISTRIBUTION 節を使用して分散統計を要求することが重要です。オプティマイザーは、不均一分散統計を使用することで、発生頻度の高い値と低い値とを区別できます。
マージ・スキャン結合
マージ結合。この結合では、外部表と内部表の両方の条件を満たす行が、結合述部の順序になっている必要があります。 マージ結合は、マージ・スキャン結合 またはソート・マージ結合 とも呼ばれます。

1 つの FROM 節内で参照される表が複数ある場合は、常に結合が必要です。2 つの異なる表からの列を等価にする結合述部がある場合、常にマージ結合が可能です。 マージ結合は、書き直された副照会から生じることもあります。

マージ結合では、表は通常 1 回だけスキャンされるため、列の結合時に入力が順序付けられている必要があります。この順序付けられた入力は、索引またはソート済みの表にアクセスすることにより取得されます。

パフォーマンスについての提案:
  • 結合される行の数を削減するために、ローカル述部 (つまり、1 つの表を参照する述部) を使用してください。
  • 統計が最新でない場合は、RUNSTATS コマンドを使用して更新します。
ネスト・ループ結合
この演算子は、外部表の行ごとに内部表をスキャン (通常は 1 回の索引スキャンを使用) するネスト・ループ結合を表します。

1 つの FROM 節内で参照される表が複数ある場合は、常に結合が必要です。ネスト・ループ結合には結合述部は必要ありませんが、通常は、結合述部がある方がパフォーマンスが向上します。

ネスト・ループ結合は、次のいずれかの方法で実行されます。
  • 外部表でアクセスされた行ごとに、内部表をスキャンする。
  • 外部表でアクセスされた行ごとに、内部表で索引参照を実行する。
パフォーマンスについての提案:
  • 内部表の結合述部列に索引が存在する場合、ネスト・ループ結合の効率がさらに向上する可能性があります。

    結合の効率を向上させるもう 1 つの方法として (重要度は低くなりますが)、外部表の結合列に索引を作成して、外部表が順序付けられるようにします。

  • 統計が最新でない場合は、RUNSTATS コマンドを使用して更新します。
戻り
この演算子は、照会からのデータの戻りを表します。これはアクセス・プランにおける最終の演算子であり、そのアクセス・プランの合計の累積値とコストを示します。
行 ID (RID) スキャン
この演算子は、1 つ以上の索引から取得された行 ID (RID) のリストのスキャンを表します。
この操作は、次の場合にオプティマイザーによって考慮されます。
  • 複数の述部が OR キーワードで接続されているか、または IN 述部が存在する場合。 索引 ORing と呼ばれる技法を使用できる場合。この技法は、同じ表に対する複数の索引アクセスの結果を結合します。
  • 単一索引アクセスのためにリスト・プリフェッチを使用すると便利な場合 (基本行にアクセスする前に行 ID をソートすると、入出力の効率が向上するため)。
リモート・データ・フェッチ
この演算子は、フェデレーテッド・システム内のリモート・データ・ソースからのデータの取り出しを表します。
ソート
この演算子は、表内の行をソートして 1 つ以上の列の順序にすることを表し、オプションで、重複項目を除去できます。

ソートが必要になるのは、要求された順序付けを満たす索引が存在しない場合、または索引スキャンよりソートの方がコストが低い場合です。ソートは通常、必要な行がフェッチされた後の最終操作として実行されるか、結合またはグループ化の前にデータをソートするために実行されます。

行の数が多い場合、またはソートされたデータをパイプ接続できない場合、この操作ではコストの高い一時表の生成が必要になります。

表スキャン
この演算子は、必要なすべてのデータをデータ・ページから直接読み取ることにより行を取り出す表スキャン (リレーション・スキャン) を表します。
以下の場合、オプティマイザーは、このタイプのスキャンを索引スキャンよりも優先して選択します。
  • 値の範囲のスキャンが頻繁に行われる (つまり、表の大部分にアクセスする必要がある)。
  • 表が小さい。
  • 索引クラスタリングの度合いが低い。
  • 表に索引が存在しない。
一時表
この演算子は、別の操作中にデータを読み取ることができるように、一時表にデータを格納することを表します。
表キュー
この演算子は、表キューを表します。これは、複数のデータベース・エージェントが 1 つの照会を処理している場合、あるデータベース・エージェントから別のデータベース・エージェントに表データを渡すために使用されます。並列処理が必要なときには、1 つの照会を処理するために複数のデータベース・エージェントが使用されます。
Union

この演算子は、必要な操作を表します。アクセス・プランのコストを改善するには、削除する行のセットを定義するその他のノード (スキャンや結合など) に注意を向けてください。

重複の除去
この演算子は、指定された列について、重複値を持つ行を除去することを表します。
更新

この演算子は、必要な操作を表します。アクセス・プランのコストを改善するには、削除する行のセットを定義するその他のノード (スキャンや結合など) に注意を向けてください。

XML データ上の索引スキャン
この演算子は、基本表にアクセスする前に、対応する XML データ上で関連索引を範囲スキャンすることを表します。 この操作により、行 ID と XML ノード ID の条件を満たす行のセットが絞り込まれます。
パフォーマンスについての提案:
  • 時間の経過とともに、データベースの更新が繰り返されることによって索引がフラグメント化され、必要以上に索引ページが作成されることがあります。これは、索引を削除して再作成するか、索引を再編成することで修正できます。
  • 2 つ以上の表がアクセスされる場合、外部表の結合列に索引を提供することによって、索引を介した内部表へのアクセスをより効率的に行えます。
  • 統計が最新でない場合は、RUNSTATS コマンドを使用して更新します。
XML 文書スキャン
この演算子は、XPath 式を評価して必要な文書フラグメントを抽出するための、XML フラグメントのナビゲーションを表します。
XML 索引 ANDing
この演算子は、XML データ上の索引について、複数の索引スキャンの結果の ANDing を表します。これは、単一照会の複雑な述部を評価するために使用されます。
この操作を使用するには、次の条件が満たされている必要があります。
  • 等価述部のみが使用されている。
  • 索引参照パスでワイルドカードが使用されていない。
  • すべての述部が同じ XML 列で使用されている。

これらの条件のいずれかが満たされていない場合は、代わりに索引の論理積操作が使用されます。

パフォーマンスについての提案:
  • データベースの更新を繰り返すと、索引のフラグメント化を引き起こし、結果として必要以上に索引ページが多くなる場合があります。これは、索引を除去して再作成するか、索引を再編成することによって修正できます。
  • 統計が最新でない場合は、RUNSTATS コマンドを使用して更新します。
  • 一般に、索引スキャンは、条件を満たす行の数がわずかな場合に最も効果的です。 条件を満たす行の数を見積もるために、オプティマイザーは、述部で参照される列に対して使用可能な統計を使用します。 一部の値が他の値より頻繁に発生する場合、RUNSTATS コマンドで WITH DISTRIBUTION 節を使用して分散統計を要求することが重要です。 オプティマイザーは、不均一分散統計を使用することで、発生頻度の高い値と低い値とを区別できます。

フィードバック