Teradata-partitioned-primary-index

提供:Dev Guides
移動先:案内検索

Teradata-パーティション化されたプライマリインデックス

パーティション化プライマリインデックス(PPI)は、特定のクエリのパフォーマンスを向上させるのに役立つインデックス作成メカニズムです。 行がテーブルに挿入されると、それらはAMPに格納され、行のハッシュ順に並べられます。 テーブルがPPIで定義されている場合、行はパーティション番号でソートされます。 各パーティション内で、行ハッシュによって配列されます。 行は、定義されたパーティション式に基づいてパーティションに割り当てられます。

利点

  • 特定のクエリの全表スキャンを避けます。
  • 追加の物理構造と追加のI/Oメンテナンスが必要なセカンダリインデックスの使用は避けてください。
  • 大きなテーブルのサブセットにすばやくアクセスします。
  • 古いデータをすばやく削除し、新しいデータを追加します。

次のOrderNoのプライマリインデックスを持つOrdersテーブルを検討してください。

StoreNo OrderNo OrderDate OrderTotal
101 7501 2015-10-01 900
101 7502 2015-10-02 1,200
102 7503 2015-10-02 3,000
102 7504 2015-10-03 2,454
101 7505 2015-10-03 1201
103 7506 2015-10-04 2,454
101 7507 2015-10-05 1201
101 7508 2015-10-05 1201

次の表に示すように、レコードがAMP間で分散されると仮定します。 記録はAMPに保存され、行ハッシュに基づいてソートされます。

AMP 1

RowHash OrderNo OrderDate
1 7505 2015-10-03
2 7504 2015-10-03
3 7501 2015-10-01
4 7508 2015-10-05

AMP 2

RowHash OrderNo OrderDate
1 7507 2015-10-05
2 7502 2015-10-02
3 7506 2015-10-04
4 7503 2015-10-02

特定の日付の注文を抽出するクエリを実行すると、オプティマイザーは全表スキャンの使用を選択し、AMP内のすべてのレコードにアクセスできます。 これを回避するには、注文日をパーティション化されたプライマリインデックスとして定義します。 注文テーブルに行が挿入されると、注文日ごとに分割されます。 各パーティション内で、それらは行ハッシュによって順序付けられます。

次のデータは、レコードがAMPに保存される方法を示しています(注文日でパーティション化されている場合)。 注文日までにレコードにアクセスするためにクエリが実行される場合、その特定の注文のレコードを含むパーティションのみがアクセスされます。

AMP 1

Partition RowHash OrderNo OrderDate
0 3 7501 2015-10-01
1 1 7505 2015-10-03
1 2 7504 2015-10-03
2 4 7508 2015-10-05

AMP 2

Partition RowHash OrderNo OrderDate
0 2 7502 2015-10-02
0 4 7503 2015-10-02
1 3 7506 2015-10-04
2 1 7507 2015-10-05

以下は、パーティションのプライマリインデックスを持つテーブルを作成する例です。 PARTITION BY句は、パーティションを定義するために使用されます。

CREATE SET TABLE Orders (
   StoreNo SMALLINT,
   OrderNo INTEGER,
   OrderDate DATE FORMAT 'YYYY-MM-DD',
   OrderTotal INTEGER
)
PRIMARY INDEX(OrderNo)
PARTITION BY RANGE_N  (
   OrderDate BETWEEN DATE '2010-01-01' AND '2016-12-31' EACH INTERVAL '1' DAY
);

上記の例では、テーブルはOrderDate列によってパーティション化されています。 毎日1つのパーティションがあります。