1.基数、直方图、集群因子

基数与选择性

    基数(Cardinality)   列唯一键(Distinct_keys)的数量。

    选择性(Selectivity) 列唯一键(Distinct_Keys)与行数(Num_Rows)的比值。

select count(distinct column_name),
       count(*) total_rows,
       count(distinct column_name) / count(*) * 100 selectivity
  from table_name;

也可以运行下面的语句查看但是我们需要先检查表的segment_size有多大,如果表的segment_size过大(比如超过SGA的buffer_cache),需要考虑运行上面SQL是否对当前的系统是否有影响。下面的语句也依赖统计信息是否准确
  select a.column_name,
       b.num_rows,
       a.num_distinct   Cardinality,
       round(a.num_distinct / b.num_rows * 100, 2) selectivity,
  from dba_tab_col_statistics a, dba_tables b
 where a.owner = b.owner
   and a.table_name = b.table_name
   and a.owner = upper('&owner')
   and a.table_name = upper('&table_name')
and a.column_name = upper('&column_name');

2
直方图 当某列数据分布不均衡为了让CBO能生成最佳的执行计划,我们可能需要对表收集直方图,直方图最大的桶数(Bucket)是254。
收集直方图需要进行全表扫描是一个很耗时的过程,如无必要,不要去收集统计信息。

 BEGIN
   DBMS_STATS.GATHER_TABLE_STATS(ownname          => 'USERNAME',
                                 tabname          => 'TABLENAME',
                                 estimate_percent => 100,
                                 method_opt       => 'for all columns size skewonly',
                                 no_invalidate    => FALSE,
                                 degree           => 1,
                                 cascade          => TRUE);
 END;




直方图分为三种:

一种是频率直方图(FREQUENCY HISTOGRAM),当列中Distinct_keys 较少(小于254),如果不手工指定直方图桶数(BUCKET),Oracle就会自动的创建频率直方图,并且桶数(BUCKET)等于Distinct_Keys。

一种是高度平衡直方图(HEIGHT BALANCED),当列中Distinct_keys大于254,如果不手工指定直方图桶数(BUCKET),Oracle就会自动的创建高度平衡直方图。

一种是NONE

3集群因子

集群因子用来描述一个表中的列是否是规则排序的

可以通过dbms_rowid.rowid_block_number(rowid)找到记录对应的block 号。索引中记录了rowid,因此oracle 就可以根据索引中的rowid来判断记录是否是在同一个block 中。举个例子,比如说索引中有1,2,3,4五个记录,首先比较1,2 是否在同一个block,如果不在同一个block 那么Clustering Factor +1,然后继续比较2,3 同理,如果2,3 不在同一个block,那么Clustering Factor+1,这样一直进行下去,直到比较了所有的记录。根据算法我们就可以知道clustering factor 的值介于block 数和表行数之间。如果clustering factor 接近block 数,说明表的存储和索引存储排序接近,也就是说表中的记录很有序,这样在做index range scan 的时候能,读取少量的data block 就能得到我们想要的数据,代价比较小。如果clustering factor 接近表记录数,说明表的存储和索引排序差异很大,在做index range scan 的时候,会额外读取多个block,因为表记录分散,代价较高。


集群因子 用来 衡量 要消耗多少的 物理IO ----通过ROWID 回表 消耗的物理IO次数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值