管理の手引き


列の相関に関する説明

2 つの表を結合した結合述部が複数ある結合で構成される照会を含んだアプリケーションがあるかもしれません。 これは複雑に聞こえますが、 表の間で、類似した、関連のある列の間の関係を判別しようとする場合は、 このような状況は珍しいことではありません。

たとえば、さまざまな色、伸縮性、品質の原料から製品が作成されます。 完成品は、その原料と同じ色、伸縮性をしています。 この場合、以下の照会を発行します。

     SELECT PRODUCT.NAME, RAWMATERIAL.QUALITY FROM PRODUCT, RAWMATERIAL
        WHERE PRODUCT.COLOR       =  RAWMATERIAL.COLOR
          AND PRODUCT.ELASTICITY  =  RAWMATERIAL.ELASTICITY

この照会は、すべての製品の名前と原料の品質を戻します。 以下の 2 つの結合述部があります。

   PRODUCT.COLOR       =  RAWMATERIAL.COLOR
   PRODUCT.ELASTICITY  =  RAWMATERIAL.ELASTICITY

DB2 UDB 最適化プログラムがこの照会を実行するプランを選択すると、 上記の 2 つの述部の選択可能性をそれぞれ計算します。 また 2 つの述部は独立していることが前提になっています。つまり、 それぞれの色ごとにすべてのレベルの伸縮性が考慮され、 また逆にそれぞれのレベルの伸縮性ごとにすべての色が考慮されます。 個々の表にある色の数と伸縮性のレベルの数に関する統計を使用して、 上記の述部の組みに関するあらゆる選択可能性を計算します。 この結果に基づいて、 たとえばネストしたループ結合とマージ結合のどちらを優先するかを選択します。

しかしながら、2 つの述部が独立していない場合もあります。 たとえば、伸縮性の高い原料には 2、3 種類の色しかなく、 伸縮性の非常に低い原料には他の (つまり伸縮性の高い原料の色とは別の) 2、 3 色しかない場合も考えられます。 この場合、2 つの述部を組み合わせた場合の選択可能性は少なくなる (除去される行が少なくなる) ので、 照会により戻される行は多くなります。 このことを確認するには、 極端なケースとしてそれぞれの色ごとに 1 つのレベルの伸縮性しかない場合やその逆の場合を考えてみてください。 この場合、一方の述部は他方の述部によって暗黙指定されるので完全に省略することもできます。 この場合、最適化プログラムによって選択されたプランは最善とはいえないこともあります。 たとえば、ネストしたループ結合のプランが選択された場合でもマージ結合の方が高速になる場合があります。

他のデータベース製品の場合、 データベース管理者はカタログ中の統計を更新して一方の述部の選択可能性を少なくすることによりこのパフォーマンス上の問題を解決していましたが、 この方法は他の照会に思わぬ副次作用が及ぶことがありました。

次の場合に、DB2 UDB の最適化プログラムは、結合述部の相互関係の検出と補正を試みます。

  1. 相関列、つまり相関述部中にある表列に関する固有索引を定義する。
  2. 登録変数 DB2_CORRELATED_PREDICATES を "NO" に設定しない。

上記の例では、以下のいずれかを含む固有索引を定義する必要があります。

   PRODUCT.COLOR, PRODUCT.ELASTICITY

または

   RAWMATERIAL.COLOR, RAWMATERIAL.ELASTICITY

またはこの両方

相関が検出されるようにするには、この索引の非組み込み列は相関列でなければならず、 またこれ以外の列はありません。 任意でこの索引に組み込み列を入れることもできます。

通常は、結合述部には 3 つ以上の相関列があり得るので、 固有索引の定義にすべての列が関係しているか確認する必要があります。

1 つの表中の相関列がその表の基本キーになっている場合もよくあります。 基本キーは常に固有なので、 相関列が基本キーになっている場合はそれとは別に固有索引を定義する必要はありません。

その後、表の統計が最新のものになっていることを確認し、 何らかの理由で (たとえば、 最適化プログラムを制御しようとして) 変更が加えられて真の値でなくなっていたりしないか確認してください。

最適化プログラムは固有索引の統計中の FIRSTnKEYCARD および FULLKEYCARD 情報を使用して相関事例を検出し、 相関述部の組み合わせによる選択可能性を動的に調整するので、 結合サイズとコストに関する見積もりの正確さが向上します。

結合述部相関に加えて、 最適化プログラムは、 タイプ COL = "定数"の単純な等価述部に関する相関についても考慮します。 たとえば、異なるタイプの車の表を考慮します。 それぞれに、MAKE (製造メーカー)、MODEL、 STYLE (セダン、ステーション・ワゴン、スポーツ・カー)、 YEAR、および COLOR があります。 COLOR に関する述部は、 MAKE、MODEL、STYLE、または YEAR に関する述部から独立していると思われます。 ほぼすべての製造メーカーは、毎年、 それぞれのモデルおよびスタイルで標準色を使用できるようにするからです。 しかし、特定の名前を持つモデルを製造するのは単一の車メーカーだけなので、 述部 MAKE および MODEL が独立していないことは明らかです。 複数の車メーカーによって同じモデル名が使用されることは非常にまれで、 明らかに車メーカーもそれは望みません。 2 つの列 MAKE および MODEL の索引が存在する場合、 最適化プログラムはその索引からの統計を使用して、 異なる値を結合した数値を判別し、 2 つの列間の相関の選択可能性やカーディナリティーの見積もりを調整します。 結合述部でない述部の場合、 最適化プログラムが調整を行うための固有索引を持つ必要はありません。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]