【TUNE_ORACLE】索引定期重建的利与弊

来源:这里教程网 时间:2026-03-03 16:32:41 作者:

索引必须定期重建吗?先来看看一些大部分人认为需要定期重建的理由:1. 索引碎片会越来越多,而且这些碎片会被重复利用2. B树索引会随着时间越来越不平衡3. 索引聚簇因子随着时间会变得不同步4. 删除索引后的空间不会被继续利用除了第一条正确,其他三条理由都不正确,因为绝大多数情况下,是不需要重建B树索引的,B树索引一般能够自动管理和自动平衡。下面来分析每条的实际情况及原因:第一条:DML操作会导致索引块附近的可用空间形成碎片,但这些碎片会被重复使用,建议不要在有索引的列上进行频繁DML操作,以减少碎片第二条:B树索引会自动平衡第三条:聚簇因子只能通过重组表中数据来改变第四条:和第一条一样,索引空间依然能被重复利用  什么时候需要考虑重建索引?1. 索引深度最好不要超过3级,否则重建。但是如果索引超过了3级但是深度不再发生变化,就不需要重建2. 查询INDEX_STATS的DEF_LF_ROWS与LF_ROWS的比值如果大于0.2(表示删除的索引条目占索引总条目的20%),或者BLKS_GETS_PER_ACCESS大于10,就需要重建索引具体操作如下: SQL> ANALZE INDEX XXX VALIDATE STRUCTURE;   --必须执行索引分析这一步,不然查不出结果 SQL> select HEIGHT, DEF_LF_ROWS/ LF_ROWS , BLKS_GETS_PER_ACCESS from INDEX_STATS;注:“ANALZE INDEX XXX VALIDATE STRUCTURE”对于分析空间占用大的索引时会对业务产生巨大影响,因为在执行期间不允许DML操作,并且需要消耗额外时间(不会锁表)  可能产生的影响重建索引会导致redo工作量进一步增加,导致真个DB性能产生一定影响。虽然重建索引会使得索引块更加集中,但是会随着DML操作的增多导致碎片增多,因此索引在每次DML后,为了达到索引平衡,会重新分割索引来调整索引结构,需要占用I/O和CPU资源,并且经过一段时间后,该索引会继续被标记成“REBUILD”,需要继续重建。所以,强烈建议使用索引默认的自平衡机制,而不是定期重建索引。 一般使用索引合并来取代索引重建,理由如下:1. 占用空间小2. 只会合并索引块,而不是去重建索引导致索引结构改变  总结 强烈不建议定期重建索引,并且不建议对含有索引的列进行频繁DML操作!!

相关推荐