Teradata-partitioned-primary-index
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句は、パーティションを定義するために使用されます。
上記の例では、テーブルはOrderDate列によってパーティション化されています。 毎日1つのパーティションがあります。