当我们创建索引时,oracle会为索引创建索引树,表和索引树通过rowid(伪列)来定位数据.
当表里的数据发生更新时,oracle会自动维护索引树.但是在索引树中没有更新操作,只有删除和插入操作。
例如在某表id列上创建索引,某表id列上有值“101”,当我将“101”更新为“110”时,oracle同时会来更新索引树,但是oracle先将索引树中的“101”标示为删除(实际并未删除,只是标示一下),然后再将“110”写到索引树中.
如果表更新比较频繁,那么在索引中删除标示会越来越多,这时索引的查询效率必然降低,所以我们应该定期重建索引来消除索引中这些删除标记.
一般不会选择先删除索引,然后再重新创建索引,而是rebuild索引.在rebuild期间,用户还可以使用原来的索引,并且rebuild新的索引时也会利用原来的索引信息,这样重建索引会块一些.