照会がスター・スキーマ結合の必須基準に適合していることを確認する
オプティマイザーは、スター・スキーマに基づく照会に、スター型結合、デカルト・ハブ結合、およびジグザグ結合という 3 つの特殊な結合方式を考慮します。 これらの結合方式により、この種の照会のパフォーマンスを大幅に改善できます。
照会が、ジグザグ結合プラン、スター型結合プラン、またはデカルト・ハブ結合プランを行うためのスター・スキーマとして認識されるためには、以下の基準を満たす必要があります。
- 1 つのファクト表と 2 つ以上のディメンション表を持つスター型照会でなければならない。 この照会に、共通の関連ディメンション表を持つ 2 つ以上のファクト表が含まれている (複数ファクト表照会) 場合、照会オプティマイザーはこの照会を、1 つの照会とその内部にある複数のスターに分割します。 すると、複数のファクト表と結合する共通ディメンション表は、照会の中で複数回使用されます。 Explain の出力では、これら複数のファクト表の照会に対する複数のジグザグ結合演算子が表示されます。
- ディメンション表には主キー、ユニーク制約、またはユニーク索引が定義されている必要があり、主キーは複合キーであっても構いません。 ディメンション表に主キー、ユニーク制約、ユニーク索引がない場合には、デカルト・ハブ結合およびスター型結合方式のスターを検出するために、古いスター検出方式が使用されます。 その場合、デカルト・ハブ結合とスター型結合は、 代替デカルト・ハブ結合とスター型結合の基準で説明されている基準を満たす必要があります。
- ディメンション表とファクト表は、ディメンション表の主キーの一部であるすべての列に equijoin 述部を使用して結合されなければなりません。
- デカルト・ハブ結合とジグザグ結合では、ファクト表に複数列索引が必要です。 結合に含まれる列はその索引の一部であり、2 つ以上のディメンション表を対象とするファクト表から十分な結合列を持っている必要があります。
- デカルト・ハブ結合およびスター型索引 ANDing 結合の場合、ディメンション表またはスノーフレークはファクト表をフィルタリングする必要があります。 (フィルタリングは、オプティマイザーの見積もりに基づいて行われます。) また、ディメンション表が、フィルターとしてではなく単にルックアップ・タイプの結合としてファクト表に結合される場合でも、スター型結合が発生することがあります。
例えば、D1、D2、D3 という 3 つのディメンション表があるとします。 ディメンション表 D1 には主キー A があり、列 A でファクト表と結合しています。ディメンション表 D2 には主キー (B、C) があり、列 B と C でファクト表と結合しています。ディメンション表 D3 には主キー D があり、列 D でファクト表と結合しています。 サポートされている索引の使用法は以下のとおりです。
- (A,D)、(A,B,C)、または (C,B,D) という索引はそれぞれ 2 つ以上のディメンション表を対象としているため、これらの索引はいずれか 1 つで十分です。
- 索引 (A,B,C,D) も 3 つのディメンション表を対象としているため適切です。
- 索引 (A,B) はディメンション表 D2 を完全には対象としていないため使用できません。
- 索引 (B,A,C) は D2 という主キーと結合する列 B および C が索引内で隣接する位置ではないため、使用できません。
以下のいずれかが出現する場合、
ディメンション表は、ジグザグ結合、スター型結合、デカルト・ハブ結合のいずれの結合方式にも含めることができません。
- サンプリング
- 非決定性関数
- 副次作用がある関数
前述の特性を持たないディメンション表は、オプティマイザーがコスト分析を使用して、ジグザグ結合またはスター型結合に含める対象として考慮します。 前述の特性を 1 つ以上持つディメンション表は、他の結合方式を使用して結合できます。
ネストしたジグザグ結合はサポートされていません。 これは、ジグザグ結合プランは別のジグザグ結合プランに対するディメンション/スノーフレークにはなれないということです。 同様に、ネストしたスター型結合はサポートされていません。 これは、スター型結合プランは別のスター型結合プランに対するディメンション/スノーフレークにはなれないということです。 さらに、ジグザグ結合プランとスター型結合プランは互いの中にネストすることはできません。
フェデレーテッド・ニックネームはジグザグ結合やスター型結合からは除外されます。 ニックネームは、他の結合方式を使用して結合できます。 スター全体がリモート Db2® データ・サーバーにプッシュダウンされた場合、リモート・データ・サーバーはジグザグ結合またはスター型結合方式を使用して照会を実行できます。
デカルト・ハブ結合とスター型結合の代替基準
ディメンション表に主キー、ユニーク制約、またはユニーク索引のいずれも定義されていない場合、
照会がデカルト・ハブ結合またはスター型結合のためのスター・スキーマとして認識されるためには、
以下の基準を満たす必要があります。
- 各照会ブロックごとに
- 少なくとも 3 つの異なる表が結合されていること
- 結合述部がすべて等価述部であること
- 副照会が存在しないこと
- 表間または照会ブロック外に相関や従属関係が存在しないこと
- ファクト表について
- 照会ブロック内で最大の表であること
- 少なくとも 10,000 行あること
- 基本表であること
- 少なくとも 2 つのディメンション表、またはスノーフレークという 2 つのグループに結合されていること
- ディメンション表について
- ファクト表ではないこと
- 個別にファクト表に結合、またはスノーフレーク形式で結合可能
- ディメンション表またはスノーフレークについて
- ファクト表をフィルタリングすること。 (フィルタリングは、オプティマイザーの見積もりに基づいて行われます。)
- ファクト表索引の列を使用するファクト表への結合述部があること。 スター型結合またはハブ型結合を検討させるには、この基準が満たされなければなりません。とはいえ、ハブ型結合では単一のファクト表索引を使用する必要があるのみです。
左または右外部結合を表す照会ブロックは、2 つの表のみを参照できます。したがって、スター・スキーマ結合は適格ではありません。
オプティマイザーがスター・スキーマ結合を認識するのに、参照整合性を明示的に宣言することは不要です。