ハッシュ インデックスの場合と同じく、ほとんどのアプリケーションにおいて統計データは、単一テーブル結合インデックスの列についてではなく、実テーブルの列について収集するべきです。
この指針における重要な例外は、複雑な式に単一テーブル結合インデックスが定義されていて、関連する基本テーブルの列に対する述部式としてもこの式が指定される場合です。これらの式の単一テーブル結合インデックスに関する統計を収集すると、述部で基本テーブルの式を指定するクエリーでの、単一テーブルのカーディナリティに関する最適化ルーチンの見積もり能力が向上します。結合インデックスでの統計収集と<Teradata Vantage™- SQLリクエストおよびトランザクション処理、B035-1142>を参照してください。
詳細は、単一テーブル結合インデックスの列ではなく実テーブルの列についての統計データを収集を参照してください。
単一テーブル結合インデックスのプライマリ インデックス列についての統計データは、INDEX句を使用して列セットを指定することにより収集できます。
例えば、ある結合インデックスが次のように定義されているとします。
CREATE JOIN INDEX OrdJIdx8 AS SELECT o_custkey, o_orderdate FROM Orders PRIMARY INDEX (o_custkey, o_orderdate) ORDER BY (o_orderdate);
この場合であれば、次の例に示すようにして、単一オブジェクトとしてのインデックス列に関する統計データを収集できます。
COLLECT STATISTICS ON OrdJIdx8 INDEX (o_custkey, o_orderdate);
複数列PRIMARY INDEX句の定義の中で指定した列を使用できるのは、COLLECT STATISTICSリクエストでINDEXキーワードを指定した場合だけです。
あまりいい方法ではありませんが、COLUMN句の構文を使って統計データを収集する方法もあります。そのためには、2つの別個の文を実行する必要があります。
COLLECT STATISTICS ON OrdJIdx8 COLUMN (o_custkey); COLLECT STATISTICS ON OrdJIdx8 COLUMN (o_orderdate);
どんな場合でも、インデックスを構成する列の統計データをそれぞれ別個に収集するよりも、インデックス自体に関して1つの複数列インデックスの統計データを収集する方が優れています。1つのセットとしてインデックス列に関する統計データを収集する場合、その方が選択の可能性の点でずっと勝っているからです。インデックスのない複数の列からも統計を収集できます。複数列に関する統計収集を参照してください。
例えば、WHERE x=1 AND y=2のような条件を含むクエリーでは、列x,yと列xの統計データを個別に収集するよりも、INDEX (y)についての統計データが収集されている場合の方がよく最適化されます。
DROP STATISTICS文についても、同じ制限が適用されます。
単一テーブル結合インデックスとハッシュ インデックスの類似点の一覧については、ハッシュ インデックスと単一テーブル結合インデックスの比較を参照してください。