ITPub博客

首页 > 数据库 > Oracle > oracle 索引的统计信息 一

oracle 索引的统计信息 一

原创 Oracle 作者:bestpaydata 时间:2015-11-09 16:15:11 0 删除 编辑
oracle索引的统计信息是用来描述索引的详细信息,包括索引的层级,叶子块的数量,聚簇因子等典型的纬度。
这些纬度的信息实际上是存储在数据字典基表 IND$,INDPART$,INDCOMPART$,INDSUBPART$等中,可以通过
数据字典DBA_INDEXEX,DBA_IND_PARTITIONS和DBA_IND_SUBPARTITIONS来分别查看索引,分区索引和局部分区索引的子分区的统计信息。
  以下是oracle数据库里面的B树索引的结构和特点。



数据字典中的blevel字段存储的就是索引的层级,它描述的从根节点到叶子块的深度,blevel被cbo用于计算访问索引叶子块的成本。从图中可以看出,blevel的值
越大,则从根节点到叶子块所需要访问的数据块的数量就会越多,耗费的io就会越多。成本越大。blevel的值从0开始算起,当为0时,表示b树索引只有一层,且根节点和叶子块就是同一个块。
显然,图中的blevel为2.

    如果要降低目标b树索引的层级,可以通过rebuild的方式实现。
以下是一个例子:
       create table t1 as select * from dba_objects;

       create index idx_t1 on t1(object_id)

       analyze index idx_t1 validate structure

可以看到该索引字段的叶子块为153个,height=blevel+1,高度为2。

delete from t1 where rownum<68913;
select count(*) from t1;

analyze index idx_t1 validate structure;

如果此时不重建索引,则LF_BLKS的数量是不会变化的,这个值被cbo用于计算对目标索引做索引全扫描(index full scan)
和索引范围扫描(index range scan)的成本,目标索引叶子块的数量越多,则对目标索引做索引全扫描和索引范围扫描的成本值会越大。

alter index idx_t1 rebuild;
analyze index idx_t1 validate structure;


重建索引后,收集的统计信息才是最真实的。

字典中distinct_keys存储的就是目标索引的索引键值的distinct值的数量。对于唯一性索引而言,在没有null值的情况下,distinct_keys的值就等于对应表的记录数。
字段中AVG_LEAF_BLOCKS_PER_KEY存储的就是目标索引的每个distinct索引键值所占用的叶子块数量的平均值,对于唯一性索引而言,这个值显然为1。
字段中AVG_DATA_BLOCKS_PER_KEY存储的就是目标索引的每个distinct索引键值所对应表中的数据行所在的数据块数量的平均值。
字典中num_rows存储的就是目标索引的索引行的数量。

下一节,将重点介绍聚簇因子。
















      
      


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30109892/viewspace-1826221/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: BBED 安装与使用
请登录后发表评论 登录
全部评论

注册时间:2015-01-19

  • 博文量
    126
  • 访问量
    1054955