17.10 - 単一テーブル結合インデックスの統計データの収集 - Advanced SQL Engine - Teradata Database

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

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

ハッシュ インデックスの場合と同じく、ほとんどのアプリケーションにおいて統計データは、単一テーブル結合インデックスの列についてではなく、実テーブルの列について収集するべきです。

この指針における重要な例外は、複雑な式に単一テーブル結合インデックスが定義されていて、関連する基本テーブルの列に対する述部式としてもこの式が指定される場合です。これらの式の単一テーブル結合インデックスに関する統計を収集すると、述部で基本テーブルの式を指定するクエリーでの、単一テーブルのカーディナリティに関する最適化ルーチンの見積もり能力が向上します。結合インデックスでの統計収集と<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文についても、同じ制限が適用されます。

単一テーブル結合インデックスとハッシュ インデックスの類似点の一覧については、ハッシュ インデックスと単一テーブル結合インデックスの比較を参照してください。