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ローカルになるような方法で配布されるように指定し、それらの基本テーブルの行への代替直接アクセス パスを提供できます。この点でハッシュ インデックスはセカンダリ インデックスと似ているところがあります。また、ハッシュ インデックスは、クエリーをカバーして基本テーブルにアクセスしなくてよいという点でも便利です。

ハッシュ インデックスと単一テーブル結合インデックスの類似点は、次のとおりです。
  • クエリーのパフォーマンスを向上させるのが基本的な機能である。
  • 実テーブルの関係する列が削除、挿入、または更新操作によって更新される時点で、システムによって両方とも自動的に処理される。
  • 両方とも、COLLECT STATISTICS(最適化ルーチン形式)、DROP STATISTICS、HELP INDEX、またはSHOW HASH INDEXのSQL文のオブジェクトにすることができる。
  • どちらも作成者の固定領域からスペースが割り当てられ、互いに異なるテーブルに格納される。
  • ハッシュ順または値順にできる。
  • 行圧縮可能。ただし圧縮方法はそれぞれ異なり、どちらも基本テーブルに使用される複数値圧縮の方法とは異なる。

    ハッシュ インデックス行、結合インデックス行、および基本テーブルの列値の圧縮に使用される方法については、ハッシュ インデックスの行の圧縮結合インデックスの行の圧縮、および複数値圧縮のみを使用する列値の圧縮を参照してください。

    結合インデックス列は親テーブルの複数値圧縮特性を継承できますが、ハッシュ インデックス列では継承できません。ハッシュ インデックス列値の圧縮を参照してください。

  • FALLBACK保護が可能である。
  • 複雑な式を単純なインデックス列に変換するために使用できる。データ変換を行なうと式に関する統計データの収集が可能で、これを最適化ルーチンが使用して、クエリーの述部で基本テーブルの列にそれらの式が指定されたときに、単一テーブルのカーディナリティの見積もりを作成できます。Teradata Vantage™- SQLリクエストおよびトランザクション処理、B035-1142を参照。
  • ハッシュ インデックスには選択リストがないが、結合インデックスはその選択リストで式を指定できる。
  • クエリーや直接更新ができない。
  • ハッシュ インデックスにパーティション プライマリ インデックスや基本AMPインデックスを含めることはできないが、単一テーブル結合インデックスは含めることができる。
  • どちらも、TOP nまたはTOP m PERCENTオプションを指定するクエリーを部分的にカバーするために使用できない。
  • MultiLoad、Teradata Parallel Transporter、およびFastLoadユーティリティで使用する場合に同じ制限がある。

ハッシュ インデックスと結合インデックスの間の相違点は、次の表のとおりです。

ハッシュ インデックス 結合インデックス
インデックス付けは1個のテーブルだけです。 複数のテーブルのインデックス付けが可能です。
論理行は、その実テーブル内のちょうど1行に対応します。 結合インデックスの定義方法により、論理行は次のうち任意のに対応します。
  • 参照されている実テーブルの1行。
  • 参照されている実テーブルの複数行。
列リストで集約関数または順序付き分析関数を指定することはできません。 選択リストで集約関数を指定できます。
その選択リストで式を指定することはできません。 その選択リストで式を指定できます。
セカンダリ インデックスは作成できません。 セカンダリ インデックスが作成可能です。
実テーブルの行を指すシステム定義の列を暗黙的に追加できます。 基本テーブルの行ポインタは、暗黙的には追加されません。

ただし、キーワードROWIDを使用して列リストの1要素を定義した場合は、基になる実テーブルの行へのポインタを明示的に作成できます。

ROWIDを指定できる場所は、CREATE JOIN INDEX文の最も外側にあるSELECTだけです。

NoPIテーブルに対して指定することはできません。 NoPIテーブルに対して指定できます。
プライマリ インデックスはパーティション化できません。 非行圧縮形式のプライマリ インデックスはパーティション化できます。
トリガーも定義されているテーブルでは定義できません。 トリガーも定義されているテーブルで定義できます。
トリガーも定義されているテーブルでは定義できません。 トリガーも定義されているテーブルで定義できます。
列複数値圧縮は、参照される基本テーブルで定義されている場合は、システムによって透過的に追加されなく、ハッシュ インデックス定義内で明示的に指定することもできません。 列複数値圧縮は、参照される基本テーブルで定義されている場合は、ユーザー入力なしでシステムによって透過的に追加されるが、結合インデックス定義内で明示的に指定することはできません。
インデックスの行圧縮は、ユーザーが入力を行なうことなく、システムによって透過的に追加されます。 インデックスの行圧縮を使用する場合、行圧縮はユーザーがCREATE JOIN INDEXリクエストで明示的に指定する必要があります。

ハッシュ インデックスは、結合インデックスの機能の機能サブセットを提供します。ハッシュ インデックスには、結合インデックスと同等の機能があります。結合インデックスと同等の機能に含まれるのは、ROWIDの一意性の部分です。<Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144>のCREATE HASH INDEXの例を参照してください。