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

Indexing 如何判断是否需要重建oracle索引,indexing,oracle11g,Indexing,Oracle11g,当我们在生产数据库中进行大规模插入/删除时,作为一种安全措施,我们总是重建索引。我很想知道Oracle是否为我们提供了一种方法来知道索引是否需要重建(即是否是最新的)在定期插入和删除之后,索引总是“最新的” 有不同的操作会使索引不可用。例如,移动表、导入某些类型或故意使索引不可用。 无法使用的索引可以通过下面的语句找到。实际的陈述可能需要更加复杂,这取决于需要做什么 到索引 select owner, index_name, status from ( select owner, ind

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

在定期插入和删除之后,索引总是“最新的”

有不同的操作会使索引不可用。例如,移动表、导入某些类型或故意使索引不可用。 无法使用的索引可以通过下面的语句找到。实际的陈述可能需要更加复杂,这取决于需要做什么 到索引

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保持快速。或者可能禁用了唯一约束以临时允许违反该约束的数据

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


如果您的问题实际上是关于索引性能的,那么它可能与。总结如下: 你应该把索引放在一边

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

索引在定期插入和删除后总是“最新的”

有不同的操作会使索引不可用。例如,移动表、导入某些类型或故意使索引不可用。 无法使用的索引可以通过下面的语句找到。实际的陈述可能需要更加复杂,这取决于需要做什么 到索引

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保持快速。或者可能禁用了唯一约束以临时允许违反该约束的数据

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


如果您的问题实际上是关于索引性能的,那么它可能与。总结如下: 你应该把索引放在一边

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