我有一个表,它在一列上有主键,并由日期列分区。这是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”分区的统计数据而不是整个分区。
有没有办法收集某一天的分区?
答案 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计划编辑原始问题,我将帮助您消化它。