收集Teradata中单个分区的统计信息

时间:2013-04-11 10:53:57

标签: teradata

我有一个表,它在一列上有主键,并由日期列分区。这是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);

每天传入的数据大小为3000万,我已经加载了2012-04-11的数据。现在我只需要收集“2012-04-11”分区的统计数据而不是整个分区。

有没有办法收集某一天的分区?

1 个答案:

答案 0 :(得分:1)

您只需收集系统列PARTITION上的统计信息,它就应该更新与分区列相关的直方图。

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

可以在分区和非分区表上收集。它有助于提供表和分区的优化器基数(如果存在)。它将更新表中所有分区的统计信息。在PARTITION列上收集统计数据是一个低CPU成本,短壁钟过程。它比在物理列或整个表上收集统计数据要便宜得多。 (即使是有数百万,数千万或更多记录的表格。)

如果您想确定优化程序是否识别刷新的统计信息,则TD 13.10没有直接的方法(不确定TD 14.x)。但是,如果在查询上运行EXPLAIN,则可以判断优化程序是否对包含分区列的条件的步骤具有高置信度。如果指定单个日期,例如DATE '2012-04-11',您应该在EXPLAIN中看到在单个分区上发生了分区消除。

如果您需要有关消化EXPLAIN的帮助,请使用查询的EXPLAIN计划编辑原始问题,我将帮助您消化它。