1

1 つの列に主キーがあり、日付列で分割されたテーブルがあります。これは DDL のサンプル形式です。

CREATE MULTISET TABLE DB.TABLE_NAME,
NO FALLBACK ,
NO BEFORE JOURNAL,
NO AFTER JOURNAL,
CHECKSUM = DEFAULT,
DEFAULT MERGEBLOCKRATIO
(  FIRST_KEY                 DECIMAL(20,0) NOT NULL,
   SECOND_KEY                DECIMAL(20,0) ,
   THIRD_COLUMN              VARCHAR(5),     
   DAY_DT                    DATE FORMAT 'YYYY-MM-DD')
PRIMARY INDEX TABLE_NAME_IDX_PR (FIRST_KEY)
PARTITION BY RANGE_N(DAY_DT  BETWEEN DATE '2007-01-06' 
                                 AND DATE '2016-01-02' EACH  INTERVAL '1' DAY );

COLLECT STATS ON DB.TABLE_NAME COLUMN(FIRST_KEY);

受信データは毎日 3,000 万のサイズになる可能性があり、2012 年 4 月 11 日のデータをロードしました。ここで、テーブル全体ではなく、'2012-04-11' パーティションのみの統計を収集する必要があります。

特定の日のパーティションを収集する方法はありますか?

4

1 に答える 1

1

システム列の統計を収集するだけでPARTITION、パーティション化された列に関連するヒストグラムが更新されます。

COLLECT STATS ON {databasename}.{tablename} COLUMN (PARTITION);

これは、パーティション化されたテーブルとパーティション化されていないテーブルの両方で収集できます。テーブルとパーティション (存在する場合) のオプティマイザ カーディナリティを提供するのに役立ちます。テーブルのすべてのパーティションの統計が更新されます。PARTITION 列での統計の収集は、CPU コストが低く、ウォール クロック プロセスが短いです。物理列またはテーブル全体で統計を収集するよりも大幅に安価です。(数百万、数千万、またはそれ以上のレコードを持つテーブルの場合でも。)

オプティマイザーが更新された統計を認識するかどうかを判断したい場合、TD 13.10 の時点で直接的な方法はありません (TD 14.x についてはわかりません)。ただし、クエリで EXPLAIN を実行すると、パーティション化された列に対する基準が含まれているステップでオプティマイザーが高い信頼性を持っているかどうかがわかります。EXPLAIN で表示されるように、単一の日付を指定すると、単一DATE '2012-04-11'のパーティションでパーティションの削除が行われます。

EXPLAIN を理解するのに助けが必要な場合は、クエリの EXPLAIN プランを使用して元の質問を編集してください。それを理解するのに役立ちます。

于 2013-04-11T14:40:28.360 に答える