Cost 计算方法

参考:

http://valen.blog.ccidnet.com/blog-htm-do-showone-uid-51502-type-blog-itemid-207620.html

 

读书心得《基于成本的Oracle优化法则》4章 索引访问路径的流程:

1. 为索引列准备谓词

2. 定位索引root block

3. 沿着 branch level 到leaf block,寻找start key

4. 遍历leaf list,获得和谓词匹配的stop key

5. 决定是否根据rowid访问table block


索引访问的成本公式:
Cost =
Blevel + (解释:索引高度)
Ceiling(leaf_blocks * effective index selectivity) +(解释:叶块×索引选择率)
Ceiling(clustering_factor * effective table selectivity) (解释:集群因素×表选择率)


有效索引选择率:
Selectivity(P and Q) = selectivity(P) * selectivity(Q)
有效表选择率
如果优化器觉得所有谓词都是基于索引的扫描,那么表扫描率就=索引扫描率
集群因素 CLUSTER_FACTOR

一个TABLE的CLUSTER_FACTOR越好,那么它越接近块数,反之则接近行数。我现在就知道 (clustering_factor * effective table selectivity)的含义了,因为优化器每次访问一个不同的块时,都需要一个新的I/O。重建索引可以减少leaf block,但是它对cluster factor无效。

 

根据索引COST计算公式:
cost = (cost(INDEX RANGE SCAN)+cost(TABLE ACCESS BY INDEX ROWID)) * optimizer_index_cost_adj%
cost = blevel +ceiling(leaf_blocks * effective index selectivity) +  -- cost(INDEX RANGE SCAN)
ceiling(clustering_factor * effective table selectivity)        --cost(TABLE ACCESS BY INDEX ROWID)

select LEAF_BLOCKS,distinct_keys,clustering_factor,num_rows from  dba_IND_STATISTICS WHERE table_name=xxxxxx' and index_name='IND_xxx';

select 2+ceil(220102*0.0191515683)+ceil(61714021*0.0191515683) from dual;
1186139

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值