列パーティション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つ以上のパーティション式を指定すると結合インデックスに対して行パーティションを定義できます。これにより、インデックスへのアクセスも最適化されて、パーティション列セットに対する範囲クエリーに対応できます。パーティション テーブルと結合インデックスを参照してください。