欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

达梦数据库基础-----统计信息

程序员文章站 2022-06-03 07:58:20
...

一、 什么是统计信息

统计信息主要是描述数据库中表、索引的大小、规模、数据分布状况等的一类信息。比如,表的行数、块数、平均每行的大小、索引的leaf blocks、索引字段的行数、不同值的大小等,都属于统计信息。

CBO正是根据这些统计信息数据,计算出不同访问路径、不同join 方式下,各种执行计划的成本,最后选择出成本最小的执行计划执行查询操作。

(CBO:Cost-Based Optimization,基于代价的优化器;计算各种“可能”执行计划的“代价”,即COST,从中选用COST最低的执行方案,作为实际运行方案。它依赖数据库对象的统计信息,统计信息的准确与否会影响CBO做出最优的选择。)

二、 统计信息的基本内容

统计信息包含几个重要的宏观数据:

 表所占的数据页数目

 实际使用数据页数,

 B树的高度 ,(对于聚集索引表)

无论做不做统计信息收集,表的当前记录数永远是有效的,因为系统自动维护了表的记录总数,这一点与大部分其他DBMS系统有所差别。

另外,如果做了列级或者索引的收集,那么统计信息还包括下列信息:

	COLID				列的ID
	SQL_PL_TYPE		数据类型
	N_TOTAL				总记录数
	N_SAMPLE			采样记录数
	N_DISTINCT			不同值数
	N_NULL				空值数
	V_MIN				最小值
	V_MAX				最大值
	BLEVEL				B树的高度
	N_LEAF_PAGES		叶子段的页数目
	N_LEAF_USED_PAGES	叶子段实际使用的页数目
	CLUSTER_FACTOR		聚集因子

CBO依据这些信息对选择率和基数进行估算。

三、 统计信息的收集

DM7收集统计信息有两种方法:一是通过一些存储过程来收集,二是用DBMS_STATS包来收集。

存储过程,如:

对表上所有的索引生成统计信息:SP_TAB_INDEX_STAT_INIT

对库上所有模式下的所有用户表上的所有索引生成统计信息:SP_DB_STAT_INIT

对指定的索引生成统计信息:SP_INDEX_STAT_INIT

对指定的列生成统计信息,不支持大字段列:SP_COL_STAT_INIT

这里推荐使用DBMS_STATS包来收集,有别于存储过程,通过这个工具包收集可以指定采用率,在数据分布极不均匀的情况下,提高统计信息的采用率,有助于提供更精确的统计信息。

使用DBMS_STATS首先得调用一个系统存储过程来创建这个包:

SP_CREATE_SYSTEM_PACKAGES(1);

DBMS_STATS包里面常用的存储过程有:

  1. COLUMN_STATS_SHOW
    根据模式名,表名和列名获得该列的统计信息。
  2. INDEX_STATS_SHOW
    根据模式名,索引名获得该索引的统计信息
  3. GATHER_TABLE_ S TAT S
    根据设定的参数,收集表的统计信息
  4. GATHER_INDEX_STATS
    根据设定的参数,收集索引的统计信息
  5. GATHER_SCHEMA_STATS
    收集模式下对象的统计信息
相关标签: 达梦