Oracle 聚簇因子
2015-02-01 18:01
309 查看
简单来说,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操作数量,
自然检索时间会大大降低
(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操作数量,
自然检索时间会大大降低
相关文章推荐
- Oracle 聚簇因子(Clustering factor)
- Oracle聚簇因子(clustering factor)
- Oracle 聚簇因子(Clustering factor)
- Oracle 聚簇因子(Clustering factor)及一次性能优化诊断
- oracle 聚簇因子的一些理解
- oracle 聚簇因子对查询性能的影响
- Oracle 聚簇因子(Clustering factor)
- Oracle 全表扫描和聚簇因子
- oracle聚簇因子(CLUSTERING_FACTOR )
- oracle 聚簇因子对查询性能的影响
- ORACLE聚簇因子
- Oracle的聚簇因子对于查询IO的影响
- oracle 聚簇因子对查询性能的影响
- Oracle 基础篇 --- 聚簇因子(clustering_factor)
- Oracle 聚簇因子(Clustering factor)
- Oracle 11g Release 1 (11.1)——聚簇和非聚簇的简单查询比较
- (3)聚簇因子(CLUSTERING_FACTOR )——上
- 聚簇因子
- 聚簇因子
- 聚簇因子