次の表では、valid-timeテーブルに作成できる結合インデックスのタイプを示します。また、valid-time列(または派生PERIODのvalid-time列の構成要素列)をインデックスに射影する必要があるかどうかも示します。
修飾子 | 単一テーブルの結合インデックス | 複数テーブルの結合インデックス | 結合インデックスと集約インデックスでのvalid-time列の必要性 |
---|---|---|---|
CURRENT VALIDTIME | 可能 | 不可 | はい/いいえ |
VALIDTIME AS OF | 不可 | 不可 | 適用なし |
SEQUENCED VALIDTIME | 可能 | 可能 | はい/いいえ |
NONSEQUENCED VALIDTIME | 可能 | 可能 | いいえ/いいえ |
文にvalid-time修飾子を明示的に指定していないときには、システムはセッションvalid-time修飾子を使用します。
Teradata Databaseは、実テーブルのすべてのcurrentまたはsequenced のDML文に対して、valid-time次元のいずれのcurrent結合インデックスおよびsequenced結合インデックスも保守します。これは、変更される列が結合インデックスに含まれて いなくても同じです。
sequenced 結合インデックスでは、システムは、SEQUENCED SELECT文の結果に通常追加されるVALIDTIME列を追加しません。
nonsequenced結合インデックスにはvalid-time列を射影する必要はありませんが、この列を射影することでインデックスの実用性が向上します。
有効時間を含むテーブルのcurrent結合インデックスおよびsequenced結合インデックスの保守に高いコストがかからないようするために、current結合インデックスで参照されない列の変更には、nonsequenced DML (二重テンポラル テーブルの場合には、非テンポラルDML)を使用してください。このような列は、履歴を必要としない時不変の(時間の経過による変化がない)列になります。
時不変の列のみが関与する結合インデックスには、nonsequenced結合インデックスを作成することが最善の方策になります。これにより、valid-time列の参照が回避され、結合インデックスに含まれない列が変更されたときの結合インデックスの保守ステップを省くことができます。
valid-timeテーブルではcurrent複数テーブル結合インデックスがサポートされていません。ただし、現在の時刻から将来の時刻までのあらゆる時点で発行されるCurrent Valid-Time問合わせのみを含めるための、sequencedのvalid-timeインデックスを作成することはできます。2つの二重テンポラル テーブルから複数テーブルの結合インデックスを作成する例を以下に示します。sequencedインデックスにテンポラル列を射影する必要があることに注意してください。
例: valid-timeを含むテーブルの結合インデックス
CREATE JOIN INDEX AS SEQUENCED VALIDTIME and CURRENT TRANSACTIONTIME SELECT X1, Y1, VT1, TT1, X2, Y2, VT2, TT2 FROM t1, t2 WHERE END(t1.VT1) >= TEMPORAL_DATE AND END(t2.VT2) >= TEMPORAL_DATE;