http://book.51cto.com/art/200812/104308.htm
2.6 二元高度(binary height)
索引的二元高度对把ROWID返回给用户进程时所要求的I/O数量起到关键作用。二元高度的每个级别都会增加一个额外的读取块,而且由于这些块不能按顺序读取,它们都要求一个独立的I/O操作。在图2-1中,我们检索一个二元高度为3的索引,这样会返回一行数据给用户,同时有4个块被读取:3个来自索引,一个来自表。随着索引的二元高度的增加,检索数据所要求的I/O数量也会随之增加。
在对索引进行分析后,可以通过查询DBA_INDEXES的blevel列查看它的二元高度:
图2-1 具有二元高度或blevel=3的索引(级别3是树叶块驻留的级别) |
XECUTE DBMS_STATS.GATHER_INDEX_STATS ('SCOTT','EMP_ID1'); BLEVEL INDEX_NAME |
技巧:
对索引或者表进行分析可以得到索引的二元高度。使用USER_INDEXES视图里的blevel列可以检查所有索引的二元高度。
二元高度主要随着表中索引列的非NULL值数量以及索引列中值的范围狭窄程度而变化。索引上如果有大量被删除的行,它的二元高度也会增加。重建索引可能会降低二元高度。虽然这些步骤可以减少针对索引执行的I/O数量,但对性能的改进却很小。如果一个索引中被删除的行接近20%~25%,重建索引会降低二元高度以及在一次I/O中所读取的空闲空间。
技巧:
一般来说,数据库块尺寸越大,索引的二元高度就越低。二元高度中的每个额外级别(blevel)在DML操作期间会增加额外的性能成本。