17.05 - CREATE HASH INDEX構文要素 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 構文規則および例

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Release Date
2021年1月
Content Type
プログラミング リファレンス
Publication ID
B035-1144-175K-JPN
Language
日本語 (日本)
database_name
user_name
hash_index_nameの格納先データベースまたはユーザーの名前(現在のデータベースまたはユーザー以外の場合)。
hash_index_name
このリクエストによって作成されるハッシュ インデックスに付ける名前。
データベース オブジェクトの命名ルールについては、<Teradata Vantage™ - SQLの基本、B035-1141>を参照してください。
ハッシュ インデックス名はテーブルの命名ルールに従っており、データベースまたはユーザー名を使用した明示的な修飾子が含まれます。
ハッシュ インデックスを、その定義に示されているテーブルと同じデータベース内で作成する場合は定義する必要はありません。
column_name_1
ハッシュ インデックスに入れられる列の名前。
列は、ハッシュ インデックスの作成時に黙示的にそのハッシュ インデックスに追加される列を含め、64個までハッシュ インデックスに指定できます。
column_name_1リストで定義されているすべての列は、ハッシュ インデックスが定義されている基本テーブルに存在している必要があります。
複数の列名を指定すると、インデックスは指定された各列が組み合わせられた値に基づいて作成されます。セカンダリ インデックス、ハッシュ インデックス、および結合インデックスを組み合わせて、1つのテーブルにつき最大32のインデックスを作成できます。これには、非テンポラル テーブルのPRIMARY KEY制約およびUNIQUE制約を実装するために使用されるシステム定義のセカンダリ インデックス、およびテンポラル テーブルのPRIMARY KEY制約とUNIQUE制約を実装するために使用される単一テーブル結合インデックスが含まれます。
PRIMARY KEYおよびUNIQUE制約によってテンポラル テーブル列に与えられるシステム定義の単一テーブル結合インデックスの数には、1基本データ テーブル当たり、セカンダリ インデックス、ハッシュ インデックス、および結合インデックスを組み合わせて32個までという制限が適用されます。
セカンダリ インデックスの定義の場合と同じように、ハッシュ インデックスの定義に使用された基本テーブルの中の対応する行へのアクセス パスを提供するため、ハッシュ インデックス定義には、Vantageによって暗黙的にいくつかの要素が追加されます。
ハッシュ インデックスの列に、次のいずれかのデータ型を指定することはできません。
  • BLOB
  • CLOB
  • ARRAY/VARRAY
  • VARIANT_TYPE
  • Period
  • LOB UDT
  • Geospatial
  • JSON
  • DATASET
ハッシュ インデックスに列値を圧縮することはできません。
基本テーブルが行レベル セキュリティ テーブルである場合、インデックス定義にすべてのセキュリティ制約列を含める必要があります。
column_name_1リストの中の列は修飾できません。
列名のリストのシステム派生列PARTITIONまたはPARTITION#Lnを指定することはできません。ただし、partitionまたはpartition#L n(nは、1から62までの値)という名前のユーザー定義列は指定できます。
この計算では、ORDER BY句と共に定義された各複数列NUSIは2つの連続するインデックスとなります。
<Teradata Vantage™ - SQLデータ定義言語 - 詳細トピック、B035-1184>の「CREATE INDEX」を参照してください。
table_name
ハッシュ インデックスを定義する基本テーブルの名前。
以下のデータベース オブジェクトに対してハッシュ インデックスを定義することはできません。
  • 列パーティション テーブル
  • グローバル一時テーブル
  • グローバル一時トレース テーブル
  • ハッシュ インデックス
  • 結合インデックス
  • ジャーナル テーブル
  • NoPIテーブル
  • キュー テーブル
  • ビュー(再帰的、非再帰的のどちらでもない)
  • 揮発テーブル
PERIODバウンド関数にPPIテーブルのパーティションが定義されている場合、そのPPIテーブルにはハッシュ インデックスを作成できません。
column_name_2
ハッシュ インデックスの行がAMP全体に分散される、任意指定の明示的に指定した列セット。
ハッシュ インデックス内の列は、BLOB、CLOB、LOB UDT、VARIANT_TYPE、ARRAY/VARRAY、Period、Geospatial、JSON、またはDATASETのデータ型であってはなりません。
列名のリストにシステム派生列PARTITIONまたはPARTITION#L nを指定することはできません。ただし、partitionまたはpartition#L nという名前のユーザー定義列を選択することはできます。nの値の範囲は1~62です。
指定する列セットは、column_name_1で指定される列セットのものであることが必要です。
ハッシュ インデックスがBY句またはORDER BY句のいずれかを指定せずに定義されている場合、ハッシュ インデックスのプライマリ インデックスがUDT列に定義されていれば、Vantageはハッシュ インデックスの行をその基本テーブルのプライマリ インデックスのハッシュによって分散します。
column_name_2リストの中に同じ列を2度指定することはできません。
column_name_2リストの中の列名は修飾できません。
ただし、partitionという名前のユーザー定義列は指定できます。
ハッシュ インデックスに列値を圧縮することはできません。
この列セットは、ハッシュ インデックスのプライマリ インデックスとなります。その行は、指定する列セットについてハッシュ処理されます。
この列セットを指定しない場合、ハッシュ インデックスの行は、インデックスを定義する基本テーブルのプライマリ インデックス列セットについてハッシュ処理されます。
パーティション列セットは指定できません。これは、ハッシュ インデックスにPPIを作成できないことを意味します。
ORDER BY
各AMPの行の順序: 値順またはハッシュ順。
ORDER BY句を指定しない場合、ハッシュ インデックスの行はインデックスを定義する基本テーブルに対して指定されている順序と同じ順序になります。
パーティション プライマリ インデックス テーブルに定義するハッシュ インデックスについて、明示的列リストを含むORDER BY句を指定する必要があります。
BY句を指定した場合、ハッシュ インデックスの定義にORDER BY句を指定する必要があります。
BY句とORDER BY句をどちらも指定しない場合、Vantageはハッシュ インデックス行が定義されている基本テーブルのプライマリ インデックス列のハッシュによってハッシュ インデックス行を分散します。
その結果、ハッシュ インデックスはAMPローカルになり、行はその列のハッシュによって整列されます。基本テーブルのプライマリ インデックスがUDT列に定義されている場合も同様です。
システム派生PARTITION列またはシステム派生PARTITION#Ln列(nは1から62の範囲の数値)を指定した場合、リクエストはリクエスト元にエラーを返します。
partitionまたはpartition#Lnという名前のユーザー定義列を指定することができます。
ORDER BY VALUESとともにcolumn_name_3リストを指定する場合、column_name_3リストは、4バイト以下のサイズの単一の数値列に制限されます。
この場合、基本テーブルのプライマリ インデックスは、4バイト以下の単一列で構成しなければなりません。
基本テーブルのプライマリ インデックス列をcolumn_name_1セットに含める必要はありません。
ORDER BY VALUESはUDT列に指定することができません。
ハッシュ インデックス行は、基本テーブルのプライマリ インデックスとして指定される列の値によって昇順で格納されます。
column_name_3リストに指定する値は、次のいずれかのデータ型にする必要があります。
  • BYTEINT
  • DATE
  • DECIMAL
  • INTEGER
  • SMALLINT
ORDER BY HASHを指定する場合、BY句を指定する必要があり、またcolumn_name_2column_name_3に指定する列は同じである必要があります。
ハッシュ インデックスの行は、それらの列の行ハッシュ値の順序になります。
ORDER BY HASHはUDT列に指定することができます。
HASHキーワードまたはVALUESキーワードを指定することなくORDER BYを指定する場合、VantageはデフォルトでVALUESによって行を並べ替えます。
この場合は、column_name_3リストを指定する必要があります。
ORDER BY句の詳細な資料については、<Teradata Vantage™ - SQLデータ操作言語、B035-1146>を参照してください。
VALUES
ORDER BY列に対する値順。
連続した値の範囲を返す問合わせを最適化する場合(特に、問合わせ計画にカバー インデックスを必要とする作業や、入れ子結合を多く使用する作業の場合)は、VALUESを選択します。
ORDER BY VALUESはUDT列に指定することができません。
HASH
ORDER BY列に対するハッシュ順。
ORDER BY列に対するハッシュ順。
column_name_3
インデックスの順序付けに使用する列セット。
ORDER BY VALUESを指定する場合、column_name_3に指定できる列は1つだけとなります。
指定する列セットは、column_name_1のサブセットでなければなりません。
列名のリストにシステム派生列PARTITIONまたはPARTITION#L nを指定することはできません。ただし、partitionまたはpartition#L nという名前のユーザー定義列を選択することはできます。nの値の範囲は1~62です。
column_name_3リストの中に同じ列を2度指定することはできません。
ハッシュ インデックスに列値を圧縮することはできません。
Period、BLOB、CLOB、LOB UDT、Geospatial、VARIANT_TYPE、またはARRAY/VARRAY列に基づいて、インデックスを順序付けすることはできません。