我认为可能值得一提的是,在ALTER指数的方式上发生了一些有趣的变化......合并命令自甲骨文 10g 起工作。

基本上,COALESCE 选项的目的是减少索引的叶块中的可用空间。这是通过有效地执行叶块的全索引扫描,比较相邻块中的可用空间来实现的。在9i中,基本方法是从逻辑上从最左边的叶子块开始,看看它是否可以合并或与第二个最左边的块合并。这要求这两个块内已用空间的总和小于 PCTFREE 值的块的 100%。如果是这样,内容将与放置在另一个块中的一个块的内容合并,并将现在为空的叶块从索引结构中删除并放置在索引自由列表中。

然后,它查看了第2个叶块(如果以前合并,现在可能是第一个块)和第3个叶块,看看它们是否可以合并。如果是这样,它们将被合并,空块被放置在自由列表中。

依此类推,直到所有的叶块都被遍历,所有可能的叶块都合并。

注意:分支块在此过程中不会直接合并,除非在发生叶块合并时使用修改后的指针信息进行更新。但是,如果删除了足够的叶块,使得分支块不再包含指向叶块(或其他中间分支块)的指针,则也会从索引结构中删除它。但是,每个级别必须始终至少有一个分支块剩余,因此在合并操作期间,索引的高度始终保持不变。

请注意,如果没有叶块具有50%或更多的自由空间,则不会合并任何内容,因为没有两个连续的叶块将具有足够的自由空间来合并。

在10g中,合并操作已经进行了一些修改。

索引不再要求相邻块中的已用空间加上 PCTFREE 之和小于块的 100% 才能有效合并。例如,一个块中的自由空间在一个叶块中可以是25%,在相邻块中只有25%(因此仅组合使用的空间就是块的150%),10g可以有效地将这些叶块合并在一起。

此演示显示了合并在 9i (9.2.0.7) 和 10g (10.2.0.3) 数据库之间的差异

10g引入了能够收缩索引的概念,并且可以将Coalesce选项视为现在与索引收缩命令非常相似。相似但不完全相同。

我将在接下来的一两天内介绍合并和收缩之间的异同......

 

参考至:http://richardfoote.wordpress.com/2008/02/05/alter-index-coalesce-10g-improvements-jump-they-say/

如有错误,欢迎指正