ハッシュ インデックスの統計データの収集 - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
ft:locale
ja-JP
ft:lastEdition
2021-03-30
dita:mapPath
ja-JP/jpx1556733107962.ditamap
dita:ditavalPath
ja-JP/jpx1556733107962.ditaval
dita:id
B035-1184
Product Category
Software
Teradata Vantage

ハッシュ インデックスのうちの該当する列については、実テーブルや結合インデックスの場合と同じように定期的に統計データを収集することが必要です。ほとんどのアプリケーションでは、ハッシュ インデックスの列ではなく実テーブルの列に関する統計データを収集する必要があります。ハッシュ インデックスの列ではなく基本テーブルの列についての統計データを収集を参照してください。

このガイドラインの重要な例外として、複合式にハッシュ インデックスが定義されていて、関係のある基本テーブルの列に述部式がその複合式を指定する場合が挙げられます。

複雑な式は、述部の右側の単純な列参照以外のものを指定する式として定義されています。最適化ルーチンは、ハッシュ インデックス式に完全にマップできる複雑な式からの統計データのみを使用できます。

UDT列に関する統計を収集することはできません。これには、インデックスのコンポーネントであるUDT列が含まれます。コスト計算を行う場合、最適化ルーチンは、UDT列の等価述部に動的AMPサンプリング情報を使用し、UDTインデックスの他の述部にはデフォルトの選択性を使用します。動的AMPサンプリングは、インデックスに関する限定的な統計情報を提供します。たとえば、これはnullまたはばらつきを検出できません。UDTインデックスのアクセス パスでパフォーマンスの向上が見られない場合、そのストレージおよび保守に関係したオーバーヘッドを回避するためにインデックスを削除することを考慮する必要があります。

これらの式のハッシュ インデックスに関する統計データを収集すると、述部で基本テーブルの式を指定するクエリーで、単一テーブルのカーディナリティに関する最適化ルーチンの見積もり能力が向上します。Teradata Vantage™- SQLリクエストおよびトランザクション処理、B035-1142を参照してください。

ハッシュ インデックスに関する統計の収集および再収集時に、常にSAMPLEオプションを使用することを考慮します。これらのオプション、およびその使用方法に関する推奨事項については、サンプリングによる統計の収集コストの削減を参照してください。

BY句を指定してハッシュ インデックスを作成した場合は、INDEX句を使用して列セットを指定することにより、該当する列に関する統計データを収集したり削除したりできます。

例えば、あるハッシュ インデックスが次のように定義されているとします。

CREATE HASH INDEX ord_hidx_8 (o_custkey, o_orderdate) ON orders
BY (o_custkey, o_orderdate)
ORDER BY (o_orderdate);

この場合であれば、次の例に示すようにして、パーティション列に関する統計データを収集できます。

COLLECT STATISTICS ON ord_hidx_8 INDEX (o_custkey, o_orderdate);

BY句の定義の中で指定した列を使用できるのは、COLLECT STATISTICS文でINDEXキーワードを使用した場合だけです。

あまりいい方法ではありませんが、COLUMN句の構文を使って統計データを収集する方法もあります。そのためには、2つの別個のリクエストを実行する必要があります。

COLLECT STATISTICS ON ord_hidx_8 COLUMN o_custkey;

COLLECT STATISTICS ON ord_hidx_8 COLUMN o_orderdate;

個々の列ではなく、インデックス自体に関する複数列インデックスの統計を収集することをお勧めします。インデックス列に関する統計を1つのセットとして収集すると、より多くの選択性を得られるからです。

例えば、WHERE x=1 AND y=2のような条件を含むクエリーでは、列xと列yの統計データを個別に収集するよりも、INDEX (x,y)についての統計データが収集されている場合の方がよく最適化されます。

DROP STATISTICS文についても、同じ制限が適用されます。