パーティション式列およびプライマリ インデックス - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 詳細トピック

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
ft:locale
ja-JP
ft:lastEdition
2021-03-30
dita:mapPath
ja-JP/jpx1556733107962.ditamap
dita:ditavalPath
ja-JP/jpx1556733107962.ditaval
dita:id
B035-1184
Product Category
Software
Teradata Vantage
ベスト プラクティスは、パーティション テーブルのプライマリ インデックスおよびパーティション列セットに関する指針を使用することです。プライマリ インデックスの特長は次のとおりです。
  • AMP間で行を均等に分散します。
  • 行に対する直接アクセスがしやすくなります。
  • 結合条件を満たすのに役立ちます。
  • 集約に役立ちます。

固有プライマリ インデックスでは、パーティション列が、固有にしたい列のセットにある場合は、そのパーティション列をプライマリ インデックスに含める必要があります。そうしない場合、プライマリ インデックスは非固有となり、プライマリ インデックス列に固有性を実現するには固有セカンダリ インデックス(USI)を使用します。

固有セカンダリ インデックス(USI)を持つテーブルへのデータのロード

MultiLoadもFastLoadも、USIを持つテーブルに行をロードすることはできません。詳細は、<Teradata® MultiLoadリファレンス、B035-2409>および<Teradata® FastLoadリファレンス、B035-2411>を参照してください。

Teradata Parallel Data Pumpユーティリティを使用することも、エラー追跡でバッチ ロードを使用することもできます。<Teradata® Parallel Data Pumpリファレンス、B035-3021>を参照してください。

バッチ ロードを実行する方法は、次のとおりです。
  1. USI、結合インデックス、ハッシュ インデックス、参照制約、またはトリガーを除き、ターゲット テーブルと同じ定義を持つ一時遷移テーブルを作成します。
  2. エラー追跡を指定してINSERT … SELECTまたはMERGEのバッチ ロードを実行し、バルク ロードされた行をターゲット テーブルに移動します。

    INSERT … SELECTおよびMERGEの詳細については、<Teradata Vantage™ - SQLデータ操作言語、B035-1146>を参照してください。エラー テーブルの詳細については、CREATE ERROR TABLEを参照してください。

パーティション プライマリ インデックスの計画

プライマリ インデックスには、アクセスや結合のためのパーティションを多数含めることができますが、データの入っていないパーティションが多すぎると、最適化ルーチンの見積もりに悪影響を与えることがあります。

パーティション列セットをプライマリ インデックス定義に単純に追加することは、必ずしも最善策とは言えません。代わりに、プライマリ インデックスとパーティション式メンバー列を、どちらも他と比べて低下させることがないよう慎重に計画する必要があります。理想的なケースとしては、あらゆる使用の可能性を良好に、また同等にサポートする方法で、プライマリ インデックスがパーティション列セットと同じように定義されることです。

RANGE_N関数を使用して定義するパーティション式の文字ベースまたはグラフィック ベースのテスト値に対して、EACH句を指定することはできません。

プライマリ インデックスにパーティション列セット全体が含まれない場合、これを固有プライマリ インデックスとして定義することはできません。このシナリオには、次の提案が適用されます。
  • プライマリ インデックス列は、効率的なアクセス パスになっている必要があり、パーティションが数多くある場合、プライマリ インデックス列セットでUSIまたはNUSIを定義することを考慮します。
  • テーブルにアクセスし、プライマリ インデックスで結合または集約される必要もある場合、パーティションの数を減らして定義することを考慮します。