数据库提供了ANALYZE语句和DBMS_STATS高级包收集统计信息,例如:收集有关表及其索引的对象属性的统计信息。
当表中数据发生较大变化时,之前的统计信息可能不准确,用户需要重新收集该表的统计信息。数据库提供了ADM_TAB_MODIFICATIONS和MY_TAB_MODIFICATIONS视图用来监测当前某表的修改次数(主要包括插,入,删除,更新),用户可以通过查看该视图来决定是否重新进行统计信息收集。
注意事项
ANALYZE/DBMS_STATS.GATHER_TABLE_STATS支持收集临时表的统计信息,临时表的统计信息收集后均为0。
无法计算或估计以下列类型的统计信息:LOB列类型(不分析LOB列类型,直接跳过),LONG列类型或对象类型。
ANALYZE/DBMS_STATS.GATHER_TABLE_STATS支持收集分区表的统计信息。
DBMS_STATS高级包支持收集所有列的统计信息,也支持只收集索引列的统计信息。但ANALYZE不支持单独收集索引的统计信息功能,如果使用ANALYZE收集表的统计信息,索引的统计信息会一起被收集。
收集表的统计信息
数据库提供收集表的以下统计信息的功能。表统计信息显示在数据字典视图MY_TABLES,DB_TABLES和ADM_TABLES中。
行数(NUM_ROWS)
*高水位线以下的数据块数 - 已格式化为接收数据的数据块数,无论它们当前是否包含数据或为空(BLOCKS)
*分配给从未使用过的表的数据块数(EMPTY_BLOCKS)
平均行长度,包括行开销,以字节为单位(AVG_ROW_LEN)
注:标有星号的统计数据是精确计算值。
索引统计信息
数据库提供收集索引的统计信息。对于常规索引,在计算或估计统计信息时,统计信息将显示在数据字典视图SYS_INDEXES、SYS_INDEX_PARTS、SYS_INDEX_PARTS、MY_INDEXES、DB_INDEXES和ADM_INDEXES中。。
详细信息请参考《GaussDB 100 V300R001C00数据库参考信息(单机)》中的“数据字典和视图”。
*索引从其根块到其叶块的深度(BLEVEL)
叶块数(LEAF_BLOCKS)
不同索引值的数量(DISTINCT_KEYS)
每个索引值的平均叶块数(AVG_LEAF_BLOCKS_PER_KEY)
每个索引值的平均数据块数(对于表上的索引)(AVG_DATA_BLOCKS_PER_KEY)
聚类因子(行与索引值的排序顺序)(CLUFAC)
在两个以上字段所建立索引的前两个字段组合索引的唯一键值数量(COMB_COLS_2_NDV)。
在三个以上字段所建立索引的前三个字段组合索引的唯一键值数量(COMB_COLS_3_NDV)。
在四个以上字段所建立索引的前四个字段组合索引的唯一键值数量(COMB_COLS_4_NDV)。
注:标有星号的统计数据是精确计算值。
列的统计信息
直方图是一种特殊类型的列统计信息,它提供有关表列中数据分布的更多详细信息。直方图将值分类为“桶”,每个桶中存放一定范围的值。
基于不同值的数量和数据的分布,数据库选择要创建的直方图的类型。 直方图的类型如下:
等频直方图:在等频直方图中,每个不同的列值对应直方图的单个桶,因为每个值都有自己的专用存储桶,所以某些存储桶可能有很多值,而其他存储桶很少。
等高直方图:在等高直方图中,列值被平均分成桶,每个桶包含大致相同的行数。
列的统计信息会随表一起收集。数据库通过列的不同值数量来确定要创建的直方图类型,如果不同值数量小于254,会生成等频直方图,否则生成等高直方图。
更新删除统计
可以使用DBMS_STATS.DELETE_TABLE_STATS/DBMS_STATS.DELETE_SCHEMA_STATS来删除表的统计信息。
重复执行ANALYZE/DBMS_STATS.GATHER_TABLE_STATS会清空上一次的统计信息,并产生新的统计信息。