索引必须定期重建吗?先来看看一些大部分人认为需要定期重建的理由: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操作!!
【TUNE_ORACLE】索引定期重建的利与弊
来源:这里教程网
时间:2026-03-03 16:32:41
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 从定位数据块所在ASM磁盘到ASM stripping
从定位数据块所在ASM磁盘到ASM stripping
26-03-03 - oracle执行计划------未走索引,隐式转换的坑
oracle执行计划------未走索引,隐式转换的坑
26-03-03 - 利用vmware创建rac共享磁盘
利用vmware创建rac共享磁盘
26-03-03 - awr-----一份经典的负载很高的awr报告
awr-----一份经典的负载很高的awr报告
26-03-03 - ORACLE dbca执行到40%报错之ORA-12154
ORACLE dbca执行到40%报错之ORA-12154
26-03-03 - 【/proc/文件浅析】另类办法恢复数据文件和控制文件
【/proc/文件浅析】另类办法恢复数据文件和控制文件
26-03-03 - 使用sql tuning advisor优化sql
使用sql tuning advisor优化sql
26-03-03 - Oracle监听日志清除
Oracle监听日志清除
26-03-03 - Oracle 19C RAC open_links_per_instance参数问题
- read by other session 等待事件分析
read by other session 等待事件分析
26-03-03
