当我们在生产数据库中进行大量插入/删除时,作为安全措施,我们总是重建索引。我很想知道Oracle是否为我们提供了一种了解索引是否需要重建的方法(即如果它是最新的)
答案 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可能会有所帮助。