如何判断是否需要重建oracle索引

时间:2013-10-24 17:14:22

标签: indexing oracle11g

当我们在生产数据库中进行大量插入/删除时,作为安全措施,我们总是重建索引。我很想知道Oracle是否为我们提供了一种了解索引是否需要重建的方法(即如果它是最新的)

1 个答案:

答案 0 :(得分:1)

常规插入和删除后,索引始终是“最新的”。

有不同的操作会使索引无法使用。例如,移动表,某些类型的导入,或故意使索引不可用。 可以使用如下所示的语句找到不可用的索引。根据需要做什么,实际的陈述可能需要更复杂 到索引。

select owner, index_name, status
from
(
    select owner, index_name, status from dba_indexes union all
    select index_owner, index_name, status from dba_ind_partitions union all
    select index_owner, index_name, status from dba_ind_subpartitions
)
where status not in ('VALID', 'N/A', 'USABLE');

但自动启用所有已禁用的索引并不总是一个好主意。

进程可能会暂时禁用并重新启用索引;你不想进入中间。或者单个分区可能故意具有不可用的索引。 这允许归档分区具有大量索引,但可以快速保留当前分区上的DML。或者可能禁用了一个唯一约束来临时允许违反约束的数据。

这个问题可能没有一个很好的通用解决方案。在复杂的环境中,每个流程都需要自行清理。开发人员必须了解 这些概念并评估每一个变化。


如果您的问题确实与索引效果有关,那么它可能与this one重复。总结一下:  你应该只留下索引。

如果您认为自己遇到了需要频繁重建的奇怪案例,那么Segment Advisor可能会有所帮助。