聚簇因子

1. 概念

     聚簇因子认为是根据索引遍历一遍实体表的逻辑读的块数。因为数据读取方式以块为单位,不是行,因此在读取大范围数据(满足条件行很多,不是unique index scan)时,利用聚簇因子好的索引,其读取块少,读取效率会很高。

2. 聚簇因子的评价

若聚簇因子大于表块的10倍左右,且需要返回1000多行记录,此索引就不能用了,不如用全表扫描。

若聚簇因子和表块的大小很接近,此说明表有序,索引的同一个叶子节点索引条目执行同一个实体表数据块。且需要返回1000多行记录,比较适合用索引来扫描。

先查索引叶节点,取每行得到rowid,再根据rowid去实体表中查询,但是聚簇因子很大的话,连续的rowid很随机,无法实现连续读取。

通过如下sql可以进行索引 聚簇因子的比较

analyze table T2012012401 estimate statistics; --获得T2012012401表在usr_table视图中的数据

SELECTA.INDEX_NAME,A.LEAF_BLOCKS,A.DISTINCT_KEYS,A.CLUSTERING_FACTOR,A.STATUS,A.NUM_ROWSAS INDEX_NUM_ROWS,

B.NUM_ROWSASTABLE_NUM_ROWS,B.BLOCKS,B.AVG_ROW_LEN

FROM  user_indexes A,USER_TABLES B WHERE INDEX_NAME IN ('IDX_TEST1','IDX_TEST2') ANDA.TABLE_NAME=B.TABLE_NAME;




上图中的聚簇因子都是13890和表行数41288很接近,与数据块244差距很大,不适用索引来  来代替表进行大部分的扫描工作


3. 对于堆表,在存储数据时,用order by等技术,按一定顺序插入,可提供某个索引的 聚簇因子

CREATE TABLE T2012012401 
TABLESPACE NETMAXTEST
AS 
SELECT ROWNUM AS RN,A.* FROM  ALL_OBJECTS A;
CREATE TABLE T2012012402
TABLESPACE NETMAXTEST
AS 
SELECT ROWNUM AS RN,A.* FROM  ALL_OBJECTS A  order by OBJECT_NAME desc;
CREATE INDEX T2012012402_RN  ON  T2012012402(RN);
CREATE INDEX T2012012402_NAME  ON  T2012012402(OBJECT_NAME)
analyze table T2012012401 estimate statistics;
analyze table T2012012402 estimate statistics;
SELECT A.INDEX_NAME,A.CLUSTERING_FACTOR,B.NUM_ROWS AS TABLE_NUM_ROWS,B.BLOCKS,A.LEAF_BLOCKS,A.DISTINCT_KEYS,
A.STATUS,A.NUM_ROWS AS 
INDEX_NUM_ROWS,
B.AVG_ROW_LEN
FROM  user_indexes A,USER_TABLES B WHERE INDEX_NAME 
IN ('T2012012401_RN','T2012012401_NAME','T2012012402_RN','T2012012402_NAME')
 AND A.TABLE_NAME=B.TABLE_NAME

得到


 第二个表安装object_name进行排序的,所以集聚好很多,且下面例子证明查询大访问(1000内,若大于1000则可能用全表扫描了),第二个表性能是第一个的一倍。

  select  * from  T2012012401 where object_name>'sun/rmi/transport/Target$1'


  select  * from  T2012012402 where object_name>'sun/rmi/transport/Target$1'




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值