Oracle 聚簇因子

来源:互联网 发布:mac打开terminal快捷键 编辑:程序博客网 时间:2024/05/16 02:15
简单来说,CLUSTERING_FACTOR反映的是通过索引扫描访问一张表,需要访问的表的数据块数量,即反映I/O的次数。这个CLUSTERING_FACTOR是如何计算出来的呢?


(1)       扫描索引结构;


(2)       顺序对比相邻索引条目的ROWID,如果两个ROWID属于不同数据块,那么CLUSTERING_FACTOR增加1;


(3)       整个索引扫描结束后,就可以得到该索引的聚簇因子数值。


了解了CLUSTERING_FACTOR的计算方法,我们可以得出以下两个极端的情况,即聚簇因子最大和最小的情况:


1 CLUSTERING_FACTOR最小时,其无限接近于表的BLOCKS数,该表是按照索引字段顺序存储的;


2 CLUSTERING_FACTOR最大时,其无限接近于 NUM_ROWS 数,该表是完全不按照索引字段顺序存储的。




SQL>  select b.table_name, a.index_name, b.num_rows, b.blocks, a.clustering_factor from user_indexes a, user_tables b where b.table_name in('T_1','T_2') and a.table_name = b.table_name;

SQL> select num_rows,blocks,avg_row_len from user_tables where table_name='AB44';
SQL> select distinct_keys,clustering_factor,num_rows from  USER_IND_STATISTICS WHERE table_name='AB44' and index_name='PK_AB44';


begin
   dbms_stats.set_index_stats(ownname => 'NCSI',indname => 'PK_AB44',clstfct => '7800');
 end;


通过查询聚簇因子发现,两个表的聚簇因子差别很大,基于rn的索引在rn是顺序排列的表中,clustering_factor的值相差很大。
在表中数据有时候属于无序状态,这个时候的CLUSTERING_FACTOR比较接近NUM_ROWS,说明如 果扫描整个表,每次都要根据Index来读取相应行的RowID,\
这个时候的IO操作很多,自然检索时间会比较长。如果数据有序的 话,CLUSTERING_FACTOR比较接近BLOCKS,说明相邻的数据在一个块中,减少了IO操作数量,
自然检索时间会大大降低
0 0
原创粉丝点击