最適化クラスの選択

最適化クラスを設定すると、最適化手法を明示的に指定できるという利点があります。

これは、特に以下の場合にそう言えます。
  • 非常に小さなデータベースまたは非常に単純な動的照会を管理する
  • コンパイル時のデータベース・サーバー上のメモリー制限に対処する
  • ステートメント準備などの照会のコンパイル時間を削減する

ほとんどのステートメントは、デフォルトの最適化クラス 5 を使用することにより、妥当な量のリソースで適切に最適化できます。 照会のコンパイル時間とリソース使用量は、主に照会の複雑さに影響され、特に結合と副照会の数に影響されます。 しかし、コンパイル時間とリソースの使用量も、実行される最適化の数によって影響を受けます。

照会最適化クラス 1、2、3、5、および 7 はすべて、汎用に適しています。 クラス 0 の使用は、照会のコンパイル時間をさらに削減する必要があり、SQL および XQuery ステートメントが非常に単純な場合にのみ考慮してください。

ヒント: 長期実行照会を分析するには、 db2batch を指定して照会を実行し、照会のコンパイルと実行にかかった時間を判別します。 コンパイル時間が長すぎる場合は、最適化のクラスを低くしてください。 実行時間が問題となる場合は、最適化のクラスを高くすることを考慮してください。
最適化クラスを選択する際は、以下の一般指針を考慮してください。
  • 始めは、デフォルトの照会最適化のクラス 5 を使用してみます。
  • デフォルト以外のクラスを選択する場合は、まず 1、2、3 のいずれかのクラスで試します。 クラス 0、1、および 2 は、欲張り型結合列挙アルゴリズムを使用します。
  • 同じ列上にたくさんの結合述部を持つ表が多数ある場合で、 コンパイル時間に制約があるという場合には、最適化クラス 1 または 2 を使用します。
  • 実行時間が 1 秒未満の非常に短い照会には、低い最適化クラス (0 または 1) を使用します。 この種の照会には、以下の傾向があります。
    • 単一の表または少しの表だけにアクセスする
    • 単一の行または少しの行だけを取り出す
    • 完全修飾したユニーク索引を使用する
    • オンライン・トランザクション処理 (OLTP) に関与する
  • 30 秒を超える実行時間の長い照会には、高い最適化クラス (3、5、または 7) を使用します。
  • クラス 3 以上では動的プログラミング結合列挙アルゴリズムが使用されます。このアルゴリズムではより多くの代替プランを考慮に入れようとするので、特に表の数が増えるにつれて、クラス 0、1、2 に比べてコンパイル時間が大幅に長くなる可能性があります。
  • 最適化クラス 9 は、照会に対する最適化要件がある場合にのみ使用します。
複雑な照会では、最適なアクセス・プランを選択するのにさまざまな量の最適化が必要になる場合があります。 以下の特性を持つ照会には、より高い最適化クラスの使用を考慮してください。
  • 大きい表にアクセスする
  • ビューの数が多い
  • 述部の数が多い
  • 副照会が多い
  • 結合が多い
  • UNION または INTERSECT などのセット演算子が多い
  • 適格となる行が多い
  • GROUP BY および HAVING 操作
  • ネストした表式

完全に正規化されたデータベースに対する意思決定支援照会または月末報告照会のようなものは、 少なくともデフォルト照会最適化クラスが使用される複合照会の良い例です。

照会生成プログラムによって生成された SQL および XQuery ステートメントには、 もっと高度な照会最適化クラスを使用してください。 多くの照会生成プログラムは非効率な照会を生成します。 適切に作成されていない照会の場合は、さらに最適化を行って良好なアクセス・プランを選択する必要があります。 照会最適化クラス 2 以上を使用すると、このような照会でも改善することができます。

SAP アプリケーションの場合は、常に最適化クラス 5 を使用してください。 この最適化クラスは、 DB2_REDUCED_OPTIMIZATION レジストリー変数の設定など、 SAP用に最適化された多くの Db2® 機能を使用可能にします。

フェデレーテッド・データベースでは、リモート・オプティマイザーに最適化クラスは適用されません。