11g 引入 INVISIBLE 索引,配合既有 UNUSABLE 狀態,提供靈活的索引管理策略。本文對比兩者在空間、維護、優化器可見性上的差異。
| 特性 | UNUSABLE | INVISIBLE |
|---|---|---|
| 空間佔用 | 立即釋放 (段被釋放) | 保留空間 |
| DML 維護 | 不維護 (INSERT/UPDATE/DELETE 不更新索引) | 正常維護 (DML 仍同步更新索引) |
| 優化器可見性 | 忽略 (不可用) | 預設忽略,OPTIMIZER_USE_INVISIBLE_INDEXES=TRUE 可啟用 |
| 恢復方式 | 必須 REBUILD 或 DROP/CREATE | ALTER INDEX ... VISIBLE 即時生效 |
| 分區索引 | 可單獨標記分區 UNUSABLE,其他分區仍有效 | 整個索引或分區均可設為 INVISIBLE |
OPTIMIZER_USE_INVISIBLE_INDEXES=TRUE)。-- 標記 UNUSABLE ALTER INDEX idx_name UNUSABLE; -- 檢查狀態 SELECT index_name, status FROM user_indexes WHERE index_name='IDX_NAME'; -- UNUSABLE -- 重建 ALTER INDEX idx_name REBUILD; -- 設定 INVISIBLE ALTER INDEX idx_name INVISIBLE; -- Session 啟用 ALTER SESSION SET OPTIMIZER_USE_INVISIBLE_INDEXES=TRUE; -- 恢復可見 ALTER INDEX idx_name VISIBLE;