1

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

4

1 回答 1

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 速度很快。或者,可能禁用了唯一约束以暂时允许违反约束的数据。

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


如果您的问题真的是关于索引性能的,那么它可能是这个的副本。总结一下:您可能应该不理会索引。

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

于 2013-10-25T05:43:42.680 回答