17.10 - 単純な結合インデックス - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1184-171K-JPN
Language
日本語 (日本)

単純な結合インデックスは、集約演算子を指定しない結合インデックスとして定義します。

単純な結合インデックスの基本的な機能は、頻繁に行なわれる結合操作を指定したどのようなクエリーにも対応できるパフォーマンスとコスト効率のよい手段を最適化ルーチンに提供することです。単純な結合インデックスは、スキーマの正規形に違反することなく、永久的な事前結合テーブルを定義することを可能にします。

単純な結合インデックスを、単一のテーブルに定義することもできます。これにより、大きな基本テーブルの列のサブセットを頻繁に結合する別の大きなテーブルと同じAMPに行をハッシュする外部キーでこの列のサブセットをハッシュできます。これは通常、基本テーブルからの適切な列の部分集合を単一テーブル結合インデックスに投じることで行ないます。このような処理はほとんどの場合、垂直パーティション化と呼ばれます。このパーティションは、パーティション結合インデックスで実行される範囲パーティションとは関係ないことに留意してください。ただし、設計でそのような処理が必要な場合は、基本テーブルからのすべて列を2番目の物理テーブル(行がAMPにハッシュされる方法のみが、基盤となる基本テーブルと異なる)に投じることもできます。

インデックスの単一テーブル形式に対する内部更新保守の頻度が少ないため、場合によっては、同じ列に複数テーブルの結合インデックスを構築するよりこの処理の方が高いパフォーマンスを達成します。

プロトタイピングを行なわない限り、特定のテーブル、アプリケーション、およびハードウェア構成にとってより良い設計がどちらかを決めることはできません。

単一テーブル結合インデックスを定義するための一般的な手順は、以下のとおりです。

  1. 結合インデックスのパーティションを行パーティション、列パーティション、あるいは行パーティションと列パーティションの混合にするかを決定します。

    パーティションを使用してインデックスを定義する場合、パーティションが単一レベルか、マルチレベルかを判別します。

  2. 頻繁に結合されるテーブルの列に関する結合インデックスを定義し、新しいパーティションで分散します。
  3. 単一テーブル結合インデックスに含める基本となる基本テーブルのcolumn_nameごとにcolumn_1_nameを定義します。

    最適化ルーチンが部分的にカバーするインデックスをその基本テーブルに結合してどの非カバー列にもアクセスできるようにするには、column_nameリストの値としてキーワードROWIDを含めます。ROWIDを指定できる場所は、CREATE JOIN INDEX文の最も外側にあるSELECTだけです。

    クエリーの作成時にこの結合を明示的に指定しない場合でも、テーブルの結合は64個までという制限は適用されます。

  4. プライマリ インデックスでインデックス付けされた結合インデックスの場合、結合が作成される列セットに対してプライマリ インデックスを定義します。これは、インデックス テーブルが結合されるテーブルの外部キーとなるのが一般的です。
  5. パフォーマンス上有利であると考えられる場合には、CREATE INDEXを使用して、結合インデックスのNUSIを1つ以上作成します。
  6. パフォーマンス上有利であると考えられる場合は、結合列、インデックス、およびORDER BY列について該当する統計データを収集します。ほとんどのアプリケーションでは、インデックス列自体ではなく、インデックスが定義されている実テーブルの列についての統計データを収集する必要があります。明確な説明については、単一テーブル結合インデックスの統計データの収集および単一テーブル結合インデックスの列ではなく実テーブルの列についての統計データを収集を参照してください。