17.00 - 17.05 - スター結合のためのインデックスの選択 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLリクエストおよびトランザクション処理

Product
Advanced SQL Engine
Teradata Database
Release Number
17.00
17.05
Published
2020年6月
Content Type
プログラミング リファレンス
ユーザー ガイド
Publication ID
B035-1142-170K-JPN
Language
日本語 (日本)

この節では、スター結合で使用するインデックスを選択するための指針について述べます。ここに述べてあることは、あくまでも指針であり、テーブルに対する複数の結合の問合わせ全体を最適化するためのインデックスを選択する場合には、より完全な性能モデルが必要になります。

それぞれのスター結合のために結合列でインデックスを作成

大さなテーブルの結合列の集まりにインデックスを作成する場合に、スター結合の処理能力が非常に向上し、これによって大さなテーブルの再分散やソートの処理が省略されます。複数のスター結合に大さなテーブルが含まれる場合には、それぞれのスター結合に関連する結合列の集まりにインデックスを作成しなければなりません。

例えば、大さなテーブルのWidgetsが、1つのスター結合の列(color、shape、size)の収集を使用して小さいテーブルの色、形状、およびサイズで結合され、別のスター結合の列(period、state、country)の収集を使用して小さいテーブルの期間、州、および国で結合されると、Widgetsに以下のインデックスを作成してそれらのスター結合で使用することができます。

  • (color、shape、size)のプライマリ インデックス。
  • (period、state、country)の非固有セカンダリ インデックス。

インデックス タイプを選択する場合のスター結合基準

大さなテーブルのそれぞれの結合列の集まりのために作成するインデックスのタイプも決めなければなりません。タイプを決めるときには、次の指針を考慮してください。

  • スター結合にはプライマリ インデックスが最適です。
  • 各テーブルには1つのプライマリ インデックスのみを作成することができます。
  • 検索される行数の見積もりが多いときには、スター結合では最適化ルーチンはUSIとNUSIを使用しません。

    スター結合へのNUSIとUSIの適用には制限があるため、大さなテーブルにインデックスを作成するときには、そのインデックスが使用されることを常に検証してください。

    NUSIまたはUSIが使用される場合は、入れ子結合によって行IDが検索されます。そのあとで、行ID結合が実行されて、データ行が検索されます。行ID結合が実行されると、大幅に効率が落ちる場合があることに注意してください。

結合列の1つをプライマリ インデックスにする場合のスター結合基準

結合列の集まりが、プライマリ インデックスの候補として基準を満たす場合(すなわち、大さなテーブルがAMP間に均等に分散されることを保証する固有値がある場合)には、以下の指針を考慮しなければなりません。

LT/ST結合 プライマリ インデックスの作成
同じ頻度で使用される場合 選択される行数が最も多いスター結合を使用します。

そのため、選択行数が少ないスター結合のためには、NUSIとUSIを使用します。

同じ頻度で使用されない場合 最も頻繁に使用されるスター結合に関連する結合列の集まりを使用します。

例えば、Widgetsと(period、state、country)間のスター結合よりも、Widgetsと(color、shape、size)間のスター結合のほうが頻繁に使用される場合には、(period、state、country)をプライマリ インデックスにする必要があります。

ただし、前者の結合よりも後者の結合の選択行数がはるかに多い場合には、プライマリ インデックスを後者の結合(color、shape、およびsizeの列に基づく)に関連付けるほうが適しています。

性能のモデル化:結合の問合わせ全体の最適化

複数の結合の問合わせ全体を最適化するためには、さらに高度な性能モデルをデータベースに適用する必要があります。

例えば、極端に長い問合わせよりも、比較的短いスター結合の問合わせを頻繁に発行したい場合があります。

その場合には、指針に反していても、長いクエリーに適したプライマリ インデックスを選択するのが適切です。これは、短い問合わせのコストよりも、長い問合わせに適したプライマリ インデックスを使って得られる効果のほうが大きく、これらの結合を組み合わせることによって、結果的にはパフォーマンスが高まるからです。

LT/ST-J1a (合理的なインデックス)スター結合では、小さなテーブルの結合列すべてを大さなテーブルのインデックスに結合する必要はありません。

共通となるスター結合列の組合わせによるプライマリ インデックスの構成

大さなテーブルの複数の列の組み合わせが異なるスター結合で使用され、さらにそれらの列の組み合わせが重複する場合には、それらの組み合わせの共通部分でプライマリ インデックスを構成する必要があります(この共通部分がプライマリ インデックスの条件に合致している場合)。

これには次の利点があります。

  • 必要なインデックスが少なくて済む
  • 複数のスター結合で同じプライマリ インデックスを共用することができる

例えば、次の条件が真であると仮定します。

  • 大さなテーブルのwidgetsの列(color、shape、size)の収集は、スター結合の小さいテーブル(color、shape、およびsize)と結合します。
  • 列(shape、size、およびperiod)のコレクションは別のスター結合の小さいテーブル(shape、size、およびperiod)と結合します。

この場合、列セットがwidgetsのプライマリ インデックスになる条件を満たしているときには、その列(shape、size)に対してwidgetsのプライマリ インデックスを定義する必要があります。