关于Clustering factor(二)
时间:2007-08-08 来源:西方经济学
Clustering factor是一种测量相对于基表上的索引的顺序程度。它一般用来评估在表上执行index访问所耗费的成本。它记录着执行索引扫描时需要访问的数据块。
Clustering factor可以从以下视图中查看:
l All|dba|user_indexes
l All|dba|user_ind_partitions
l All|dba|user_ind_subpartitions
它的值是按照以下算法计算出来的:
l 索引按顺序扫描
l 将当前扫描的索引条目的rowid与前一个扫描的rowid做比较,这个比较是在索引的leaf block完成(这些块本身无需访问)。
l 如果发现这两个相邻索引条目的rowid指向不同的block,这时计算器自动计数(自增)。
l 这个动作贯穿于整个index。
l 这个计数结果被存储下来。
如果这个计数值与表中的block数比较接近,则说明索引是有良好的排序。这是因为只有发现相邻索引条目的rowid指向不同的数据块时,才会计数。
如果这个计数值与表中的记录数比较接近,则说明索引是无序的。在这种情况下,相邻的索引条目可能指向不同的数据块,查找某个索引值的时候可能需要读取更多的数据块。
这个clustering factor可以用来调整某个特殊查询所需要访问的block数目。这个决定了使用索引访问表时可能需要访问表的block数目。
当使用索引查找结果时,clustering factor是一个高效的计数器,用来确定需要访问的数据块的数目。将此值乘以索引的选择性将会得出本次操作的成本。index range scan的成本由其控制。