达梦数据库统计信息的基本概念
1、统计信息主要是描述数据库中表和索引的大小数以及数据分布状况等的一类信息。比如:表的行数、块数、平均每行的大小、索引的高度、叶子节点数以及索引字段的行数等。
2、统计信息对于 CBO(基于代价的优化器)生成执行计划具有直接影响。例如在嵌套循环中需要选择小表作为驱动表,两个关联表哪个是小表完全取决于统计信息中记录的数据量信息。此外,访问一个表是否要走索引,关联查询能否采用其它关联方式等都是 CBO 基于统计信息确定的。因此,统计信息的准确是生成最优执行计划的必要前提。
统计信息收集方法
--收集指定用户下所有表所有列的统计信息: DBMS_STATS.GATHER_SCHEMA_STATS('username',100,TRUE,'FOR ALL COLUMNS SIZE AUTO'); --收集指定用户下所有索引的统计信息: DBMS_STATS.GATHER_SCHEMA_STATS('usename',1.0,TRUE,'FOR ALL INDEXED SIZE AUTO'); --或 收集单个索引统计信息: DBMS_STATS.GATHER_INDEX_STATS('username','IDX_T2_X'); --收集指定用户下某表统计信息: DBMS_STATS.GATHER_TABLE_STATS('username','table_name',null,100,TRUE,'FOR ALL COLUMNS SIZE AUTO'); --收集某表某列的统计信息: STAT 100 ON table_name(column_name);
注意事项
统计信息收集过程中将对数据库性能造成一定影响,避免在业务高峰期收集统计信息。