据我所知,索引可以是 VALID、INVALID、UNUSABLE 和 N/A 状态。对于子分区索引,我看到状态为 USABLE 而不是 VALID。我在任何地方都找不到这种状态的原因。请让我了解这种状态背后的原因。
我创建了一个子分区表。在其上创建本地索引。查看所有 ind 表中的索引状态。这一切都有 N/A。只有 all_ind_subpartitions 表具有 USABLE 状态。
这只是术语上的差异。
USABLE
= VALID
。出于某种疯狂的原因,在分区段级别使用了与索引级别不同的术语。 N/A
表示索引分区的级别低于您正在查看的级别,因此它不能代表更高级别的状态,因为它可能是可用和不可用的混合。因此,您必须查看段级别(对于复合分区索引为 dba_ind_partitions
或 dba_ind_subpartitions
)视图以查看实际状态。
如果索引的any子分区不可用,除非查询被分区修剪,否则索引将不会被使用。人们希望这可以反映在索引级别,但不幸的是 Oracle 选择不这样做。因此,如果您试图找出未使用索引的原因,请确保检查
dba_ind_subpartitions
或 dba_ind_partitions
(如果不是复合分区)并查找任何处于不可用状态的行。重建任何不可用的段以将索引恢复到有用状态。
我不确定,但我认为 INVALID 和 UNUSABLE 之间的区别适用于 Partial Indexes.
当您删除或截断分区并且索引未重建时,索引(或索引分区)变为无效。
由于
INDEXING OFF
子句,未创建 UNUSABLE 索引分区。