当前位置: 首页 > 工具软件 > cost-model > 使用案例 >

Cost 计算方法

巫马令
2023-12-01

参考:

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

 

 

 类似资料: