Observation: Many Column Functions(監視レポート:列関数の数が多い)

列関数の数が1つのステートメントのしきい値の上限を超えています。DB2は、データ検索時またはソート時に、列関数を最も効率的に評価します。DB2オプティマイザーは、いつ列関数を評価したかを、PLAN_TABLEのCOLUMN_FN_EVAL列に"R"(データ検索)または"S"(ソート時)の値を付けることによって示します。

以下のシナリオでは、列関数に関するDB2の最も効率的な評価について説明します。各シナリオの説明には以下が含まれています。

  • 列関数の使用状況および必要なデータベース オブジェクト(索引など)

  • DB2がシナリオを選択したことを示すPLAN_TABLEの列の値

  • シナリオを満たすために必要な基準

シナリオ:

GROUP BYがない列関数:PLAN_TABLEのCOLUMN_FN_EVAL列の値が"R"。

  • 各列関数が1つの列において処理されます。

  • すべての述部がステージ1で評価されます。

  • 結合に関しては、列関数が内部表において処理されます。

GROUP BYがなく、MINまたはMAXの索引がある列関数:PLAN_TABLEのCOLUMN_FN_EVAL列の値が" "で、ACCESSTYPE列の値が"I1"。

  • 1つの列関数だけをコーディングし、これは1つの列において処理されます。

  • すべての述部がステージ1で評価されます。

  • 述部の列が基本列として定義された複合索引を作成しました。MIN/MAX列がその直後にあります。MIN/MAX列の索引キーは、MINの場合は昇順、MAXの場合は降順になっているはずです。

GROUP BYがあり、GROUP BYのソートが必要でない列関数:PLAN_TABLEのCOLUMN_FN_EVAL列の値が"R"。

  • 各列関数が1つの列において処理されます。

  • すべての述部がステージ1で評価されます。

  • 結合に関しては、列関数が内部表において処理されます。

GROUP BYがあり、GROUP BYのソートが必要な列関数:PLAN_TABLEのCOLUMN_FN_EVAL列の値が"S"。

  • 各列関数が1つの列において処理されます。

  • 列関数に対してDISTINCTを指定しませんでした。

  • 列関数の1つに対してDISTINCTを指定しました。DISTINCTを含む索引とGROUP BY列が適切な順序に並べられています。

  • すべての述部がステージ1またはステージ2で評価されます。

  • 結合に関しては、列関数が任意の表において処理されます。

列関数STDDEV、STDDEV_SAMP、VAR、およびVAR_SAMPは、かなりの処理コストが必要となるため、できるだけ使用を避けるようにしてください。