17.00 - 17.05 - 結合インデックス行の分散 - Advanced SQL Engine - Teradata Database

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

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

列パーティションNoPI結合インデックスを除いて、AMP全体にわたる結合インデックス行のハッシュ分散は、指定のPRIMARY INDEX句またはPRIMARY AMP INDEX句によって制御されます。Teradata Databaseによって列パーティションNoPIデータベース オブジェクトの行がAMPに割り当てられる方法の説明については、<Teradata Vantage™ - データベースの設計、B035-1094>を参照してください。

ほとんどの結合インデックスの場合、プライマリ インデックスは非固有である必要があります。UPIは単一テーブル結合インデックスにのみ許可されます。プライマリ インデックスまたは基本AMPインデックスを明示的に定義していない場合、結合インデックスに対して最初に定義された列がプライマリ インデックスとして割り当てられますが、これは列がパーティション化されていない場合に限ります。基本AMPインデックスは常に非固有です。

プライマリ インデックスの場合デフォルトでは、プライマリ インデックスの列セットのハッシュ コードによって、行は各AMPでローカルにソートされます。オプションのORDER BY句を結合インデックス定義で使用して、選択した単一の列に基づいて並替えをすることができます。ORDER BY句を使用すると、行データ値のハッシュ コードによるデフォルトのソートではなく、生のデータ値によるソートが可能です。

結合インデックスNUSIをハッシュ コードではなくデータ値別にソートすることは、ソート キーを必要とする範囲クエリーの場合、特に有益です。結合インデックス範囲クエリー サポートに関する値順NUSIと行パーティションの比較については、範囲クエリーをカバーする際の、行パーティション結合インデックスと値順NUSIの選択を参照してください。

値順NUSIストレージを使用すると、順序付けする値の列に選択制約を指定するクエリーで、パフォーマンスが向上します。NUSI値のソートは単一の4バイト数値列またはDATE列に限定されます。

たとえば、一般的なタスクが、売上日付に基づいて売上情報を検索することであると想定します。売上テーブルに結合インデックスを作成して、売上げ日付に基づいて順序付けすることができます。このようにすることの利点は、売上日付によって売上を要求するクエリーがアクセスする必要のあるデータ ブロックが、クエリーで指定された値または値の範囲を含むものだけになることです。

次の例では、結合インデックス行は非固有プライマリ インデックスとしてc_nameを使用して各AMP全体にハッシュ分散され、ソート キーとしてc_custkeyを使用して各AMPで値順になります。

    CREATE JOIN INDEX ord_cust_idx AS
    SELECT (o_custkey, c_name), (o_status, o_date, o_comment)
    FROM Orders
    LEFT JOIN Customer ON o_custkey = c_custkey
    ORDER BY o_custkey
    PRIMARY INDEX (c_name);

作成する結合インデックスが行圧縮されない場合は、1つ以上のパーティション式を指定すると結合インデックスに対して行パーティションを定義できます。これにより、インデックスへのアクセスも最適化されて、パーティション列セットに対する範囲クエリーに対応できます。パーティション テーブルと結合インデックスを参照してください。