- 結合インデックスのストレージ構成は、ストレージ領域を小さくするために圧縮形式をサポートしています。
循環情報が含まれる行のグループが結合インデックスにあることが分かっている場合は、固定列とは別の括弧で循環列を囲むことにより、その定義DDLで循環グループを指定することができます。つまり、各グループを括弧で囲んで区切って、列リストを2つの列グループとして指定します。最初のグループには固定列が含まれ、2番目のグループには非循環列が含まれます。
行圧縮と行パーティション プライマリ インデックスの両方を同じ結合インデックスには定義できません。
結合インデックスの行の圧縮についての説明では、圧縮という用語は、繰り返しのない列の複数の値セットが繰り返しのある列の単一の値セットに付加されるという論理行の圧縮を示しています。Teradata Databaseは循環値セットを1回だけ格納できます。一方、非循環列の値は、基本循環セットの論理セグメント拡張として格納されます。
例えば、5 つの行を持つ結合インデックスji_no_compがあるとします。この結合インデックス テーブルは、次のようなものであるとします。
column_1 column_2 column_3 column_4 column_5 1 2 0 2 4 2 4 8 7 7 1 2 2 3 1 1 2 5 3 3 2 4 3 4 6 この結合インデックスの各行をよく見ると、column_1の値1がcolumn_2の値2とペアでいくつか繰り返されていることに気付きます。これらの循環ペアを青緑色で強調表示しています。column_1の値2がcolumn_2の値4とペアでいくつか繰り返されていることも分かります。これらの循環ペアを褐色で強調表示しています。column_3、column_4、column_5の値のどれも繰り返されていません。
これらの行の新しい圧縮結合インデックスを定義することによって、格納される行の数を5つから2つまで減らすことができます。そのためには、次のようなインデックスを定義することになります。
CREATE JOIN INDEX ji_comp AS SELECT (column_1, column_2), (column_3, column_4, column_5) FROM table_zee PRIMARY INDEX (column_3);
このリクエストでは列が括弧で囲まれてグループ化されているので、最初の列グループは値が繰り返される列セットを表わし、一方2番目の列グループは値が繰り返されない列セットを表わしていることがTeradata Databaseには分かります。
Teradata Databaseがどのようにして元の5行のデータを次の2行の形で格納し、インデックスに必要な記憶領域を5行から2行に減らすのかを考えてみてください。結合インデックスji_compが使用するディスク領域はji_no_compよりも少なくなりますが、論理的には同じ5行を表わします。次の表現では、循環列の値を青緑色で強調表示し、それらに付随する固定列の値を褐色で強調表示しています。
(1,2) (0,2,4) (2,3,1) (5,3,3) (2,4) (8,7,7) (3,4,6) 結合インデックス行の圧縮の指定に使用する必要がある構文の詳細については、<Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144>を参照してください。
- 列値の圧縮の説明では、圧縮は複数値圧縮またはアルゴリズム圧縮のどちらかを指します。複数値圧縮は、行そのものではなくテーブル ヘッダーに1回だけ出現する列値のストレージであり、行ヘッダー内のプレゼンス ビットの配列で列値を参照します。アルゴリズム圧縮は、UDFを使用するユーザー定義の列複数値圧縮方式です。結合インデックス列値の圧縮を参照してください。アルゴリズム圧縮UDFの作成については、Teradata Vantage™- SQL外部ルーチン プログラミング、B035-1147を参照してください。
Teradata Databaseが複数値圧縮に使用するこの方法は、ディクショナリ インデックス付けといい、ランレングス符号化のバリエーションと見なすことができます。その他の詳細は、Teradata Vantage™ - データベースの設計、B035-1094を参照してください。
結合インデックス行の圧縮の詳細については、物理結合インデックスの行圧縮を参照してください。