oracle 索引统计信息


在介绍索引统计信息之前,我们来根据图8-5简要回顾一下索引的结构。处于顶端的数据块称为根块(root block)。这个块就是每次查询的起始块。根块又引用分支块(branch block)。注意,也可以将根块看作一个分支块。每个分支块又相应地引用另一级别的分支块,或者如图8-5所示,引用叶子块(leaf block)。

叶子块存储键值(在本例中,键值是在6到89之间的一些数字),并存储引用数据的rowid。对于任何一个给定的索引,根块和每个叶子块之间的分支块的数量永远是相同的。换句话说,索引永远是平衡的。注意,为支持高效率的范围值查找(例如,在25和45之间的所有值),叶子块都互相链接起来。


 

并非所有索引都具有这三种类型的块。实际上,分支块只有在根块无法存储引用的所有叶子块时才会出现。此外,如果索引非常小,那么它会由一个单独的块组成,并包含通常由根块和叶子块存储的所有数据。

下面的查询展示了如何获取一张表最重要的索引统计信息:

COLUMN name FORMAT A10

COLUMN blevel FORMAT 9

COLUMN leaf_blks FORMAT 99999

COLUMN dst_keys FORMAT 99999

COLUMN num_rows FORMAT 99999

COLUMN clust_fact FORMAT 99999

COLUMN leaf_per_key FORMAT 99999

COLUMN data_per_key FORMAT 99999

SELECT index_name AS name,

       blevel,