2013-10-24 66 views
1

當我們在生產數據庫中進行大量的插入/刪除時,作爲一項安全措施,我們總是重建索引。我很想知道Oracle是否讓我們知道索引是否需要重建(即,如果它是最新的)如何判斷oracle索引是否需要重建

回答

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可能會有所幫助。

相關問題