oracle的clustering_factor

CLUSTERING_FACTOR表示表上数据的存储顺序和索引字段的顺序符合的程度,clustering_factor主要影响index range scan


1、表中数据的存放顺序按object_id存放,索引也建在object_id列上。

预测:因为数据在表中存放顺序和索引顺序一致,,clustering_factor和表数据块个数应该相近。

SQL> drop table test;

Table dropped.


SQL> create table test as select * from dba_objects order by object_id;

Table created.


SQL> create index idx_test_object_id on test(object_id);

Index created.


SQL> analyze table test compute statistics for table for all indexes for all indexed columns;

Table analyzed.


SQL> select table_name,blocks,num_rows from user_tables where table_name='TEST';

TABLE_NAME BLOCKS NUM_ROWS

------------------------------ ---------- ----------

TEST 705 49842


SQL> select clustering_factor from user_indexes where index_name='IDX_TEST_OBJECT_ID';

CLUSTERING_FACTOR

-----------------

 685


表数据块数是705,索引聚簇因子是685,接近。发现聚簇因子比数据块数还要少,这是为什么?其实只要稍加注意就会了解到,数据块中不只包含数据还包含一些其他控制信息,而clustering_factor只包含有数据。


2、表中数据按object_name顺序存放,索引建在object_id列上。

预测:表中数据存放顺序和索引排序顺序不一定一致,所以聚簇因子会远远大于数据块数。

SQL> drop table test;

Table dropped.


SQL> create table test as select * from dba_objects order by object_name;

Table created.


SQL> create index idx_test_object_id on test(object_id);

Index created.


SQL> analyze table test compute statistics for table for all indexes for all indexed columns;

Table analyzed.


SQL> select table_name,blocks,num_rows from user_tables where table_name='TEST';

TABLE_NAME BLOCKS NUM_ROWS

------------------------------ ---------- ----------

TEST 705 49842


SQL> select clustering_factor from user_indexes where index_name='IDX_TEST_OBJECT_ID';

CLUSTERING_FACTOR

-----------------

 36531


表中数据块数705,数据行49842,聚簇因子36531.聚簇因子远远大于表中数据块数,更接近于表中数据行数。


关于clustering_factor的计算方法:

因为索引是排序的,所以oracle会先找到表中物理存储的第一行,该行的clustering_factor=1;

再看物理存储的第二行,如果该行与第一行在同一个数据块,聚簇因子clustering_factor还是1不会增加,否则加1;

依次类推,直到表中所有行都计算完。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24496749/viewspace-723294/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24496749/viewspace-723294/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值