oracle索引碎片
author:skate time:2010-05-31 索引页块碎片(Index Leaf Block Fragmentation) 这篇文章将会回答如下问题: 什么是索引页块碎片?什么时候被重用? 什么是半空索引碎片?什么时候被重用? oracle的标准索引结构是B×tree结构,一个B×tree结构由三种block组成 根块(root block): 在B×tree里有且只有一个block,所有访问索引都从这开始,root block下有很多child blocks。 分支块(Branch blocks): 这是中间层,branch block是没有什么限制的,它是随着leaf block的增加而增加的,branch block一般是4层,如果多于4层,就影响性能了。在我们删除行时,branch block是不被删除的。 叶块(leaf block): 叶块是最底层,上面存储着索引条目和rowid 索引和表数据是级联关系的,当删除表数据的时候,索引条目也会被自动删除,这样在index leaf block就会产生碎片,这也就是在OLTP系统上有大量更新的表上不建议创建大量的索引,很影响性能 有的人说删除过的索引条目空间不会被再用,因为在应用中不会再有insert相同的数据。其实这个 说法不完全对的,除了半空叶块外,其他的删除的索引空间是可被再利用的。 eg: