【調優】CBO基礎(六)

yellowlee發表於2011-12-27

簡單btree訪問

這部分看看單表的btree訪問的cost

 

cost =

blevel +

ceiling(leaf_blocks * effective index selectivity )+

ceiling(clustering_factor * effective table selectivity)

 

 

做個測試驗證一下:

 

 

create table t_test_tb12 as select * from dba_objects a where a.OBJECT_ID is not null ;

create index ind_test_tb12_1 on t_test_tb12(object_id);

 

insert into t_test_tb12 select * from t_test_tb12 a ;

 

 

begin

dbms_stats.gather_table_stats(user,'t_test_tb12');

end;

/

 

這裡的

effective index selectivity

effective table selectivity

可以由下面公式計算出:

1/DISTINCT_KEYS

AVG_DATA_BLOCKS_PER_KEY /NUM_ROWS

 

 

SELECT A.BLEVEL, --2

       A.LEAF_BLOCKS,--844

       A.DISTINCT_KEYS, --91550

       A.AVG_LEAF_BLOCKS_PER_KEY,--1

       A.AVG_DATA_BLOCKS_PER_KEY,--4

       A.CLUSTERING_FACTOR,--366200

       A.NUM_ROWS--366200

  FROM DBA_INDEXES A

 WHERE A.INDEX_NAME = UPPER('ind_test_tb12_1');

 

select * from t_test_tb12 a where a.object_id  = 15;

測試多次插入值,收集統計資訊後的查詢計劃,檢視cost值可以看到,基本可以符合前面的公式:

 

select  1 + ceil(190*1/91548) +ceil(1896*1/91548) from dual ;

select  2 + ceil(844*4/91550) +ceil(366200*4/366200) from dual ;

select  2 + ceil(1714*8/91550) +ceil(732400*8/732400) from dual ;

select  2 + ceil(3349*16/91550) +ceil(1464800*16/1464800) from dual ;

 

 

這個公式也不難理解,基本的原理有幾點:

1,  btree的基本結構,root/branch block ,leaf block的特點

2,  通過btree訪問行的原理

 

 

上面的例子是=號,><<>的情況類似,也可以推算出來。

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16179598/viewspace-714028/,如需轉載,請註明出處,否則將追究法律責任。

相關文章