行の分散とDBMS Teradata(プライマリインデックス)へのアクセス

前の投稿: Teradataとは何ですか?



Teradataはどのように文字列を配布しますか?







主キー(PK)対 プライマリインデックス(PI)


主キーは、各行を一意に識別するリレーショナルモデルの規則です。

プライマリインデックスは、行の分散とアクセスを定義するTeradataの規則です。

適切に設計されたデータベースには、PIがPKと同じテーブルと、PIがPK以外の列で定義され、アクセスパスに影響を与える可能性があるテーブルが含まれます。



主キー(PK) プライマリインデックス(PI)
論理データモデリングの概念 回線の分配とアクセスのメカニズム
TeradataはPK定義を必要としません テーブルにはPIが1つ必要です
列制限なし 1〜64列の場合があります
PKは論理データモデルで定義されます PIはテーブルの作成時に定義されます
値は一意である必要があります。 値は一意である必要はありません
一意性により各行が識別されます AMPに文字列を配置するために使用されます
値を変更しないでください。 値は変更される場合があります。
null値を受け入れることはできません null値をとることがあります
アクセスパスには適用されません 最も効果的なアクセスパスを決定します。
論理的に正しいために選択されました。 物理的性能の複合値に選択


PIには、 UPI (一意のプライマリインデックス)とNUPI (非一意のプライマリインデックス)の2種類があります。 UPIを使用する場合、文字列はAMP間で均等に分散され、NUPIを使用する場合、同じインデックス値を持つ文字列は同じAMPを参照します。



UPIおよびNUPIを使用したテーブルの作成:



CEATE TABLE Table1 ( Col1 INTEGER, Col2 INTEGER ) UNIQUE PRIMARY INDEX (Col1);
      
      







 CEATE TABLE Table2 ( Col1 INTEGER, Col2 INTEGER ) PRIMARY INDEX (Col2);
      
      







文字列のハッシュ分布


プライマリインデックス値はハッシュアルゴリズムに渡されます。これにより、すべてのAMP間で一意の値が均一に分散されます。 このアルゴリズムは、32ビットのハッシュ文字列値を生成します。 最初の16ビット(ハッシュバケット番号)は、ハッシュマップへのポインターとして使用されます。 ハッシュ値は、ハッシュアルゴリズムを使用して計算されます。 ハッシュマップはシステムごとに一意に構成され、DSW(統計キー)を特定のAMPに関連付ける配列です。 同じ数のAMPを持つ2つのシステムは、同じハッシュマップを持ちます。 システム内のAMPの数を変更するには、ハッシュマップを変更する必要があります。



NoPIテーブル


NoPIテーブルは、 プライマリインデックスのないテーブルです(Teradataの第13バージョンの機能)。 この場合、新しい行は常にテーブルの最後に追加され、ハッシュシーケンスの途中には追加されません。

回線はAMP間でも分散されます。 新しいランダムコードは、文字列または文字列のグループを受け取るAMPを決定します。 AMP内では、行は単にテーブルの最後に追加されます。 これらは一意の識別子を持ち、値の一意性を高めます。



利点:

テーブルは、中間ETLテーブル(抽出、変換、ロード-プライマリインデックスを持たない)のオフセットを減らします。

NoPIステージングテーブルへの読み込み(FastLoadおよびTPump Array Insert)は高速です。



PPIおよびMLPPI


PPI (Partitioned Primary Index)は、範囲制限を指定するクエリを送信するときに、大きなテーブルのパフォーマンスを向上させるために使用されるパーティションメカニズムです。

PPIを使用したデータ分散は、PIに基づいています。プライマリインデックス->ハッシュ値->行を受信するAMPの定義。 NPPI(パーティションプライマリインデックスなし)を使用すると、AMPの文字列はハッシュ文字列の順序で配置されます。 PPIを使用する場合、文字列は最初にパーティションに配置され、次にハッシュ文字列の順に配置されます。



MLPPI (マルチレベルパーティションプライマリインデックス)は、マルチパーティション化または非圧縮結合インデックスの使用を可能にします。 マルチレベルのパーティション分割では、各パーティションレベルは式RANGE_NまたはCASE_Nを使用して個別に決定されます。



パーティション化(パーティション化)の目的は、テーブル内のデータがめったに更新されない場合(たとえば、さまざまなログ)にシステムの負荷を軽減することです。



PS

本日、TeradataのブログでTeradata DBMSのストレージ構造の物理設計というタイトルの記事を公開したため、 セカンダリインデックスについては説明しません。

会社が定期的な一連の記事を継続し、ドキュメントを英語から翻訳する必要がないことを願っています。



All Articles