oracle索引何时以及为什么无效



我一直认为B-树索引总是在每次插入、更新或删除后更新(重新平衡)。然而,看起来Oracle在删除后不会更新它(删除的叶仍然保留在索引树中)。插入并更新使用B-树索引类型的行怎么样?每次插入/更新时是否更新索引?

另一个问题是,为什么以及何时索引变得无效,因此需要重建它们?我最关心的是B树索引,但也很想知道什么时候必须重建其他类型的索引。

如果您有一个带有全局索引的分区表,并且您从该表中删除了一个分区,则索引将无效。但是,在删除分区时,可以指定隐式重建索引。

在正常操作下,索引在Oracle中不会变为无效。

他们也很少需要"重建"。请参阅这篇Ask Tom的文章了解详细信息。乔纳森·刘易斯的博客也包含了关于这个主题的非常有用的信息:

我认为索引无效的唯一可能方式是手动禁用索引(alter index foo disable)或通过直接路径插入加载数据时,例如使用带有direct=true选项的SQL*Loader。

编辑:

我当然忘了分区。温弗里德的回答是对的。

最新更新