索引將邏輯值映射至 RowID,實現快速定位。但大表建索引不當會:佔用 SGA 緩衝區排擠熱點資料塊、觸發頻繁物理 I/O、DML 維護開銷大。核心原則:**分區大表配合分區索引、或干脆不建索引走全表掃描 + 並行查詢**。
LOCAL 分區索引 (每分區獨立索引段) 或 GLOBAL 跨分區索引。Local 索引維護成本低 (Truncate Partition 瞬間完成),Global 索引查詢效率高但維護重。依據查詢模式選擇。聚簇 將多個表依共同鍵值 (Cluster Key) 混合儲存在同一 Oracle 區塊。
優勢:單次 I/O 同時取得父表與子表資料,減少區塊讀取、天然預連接。
適用:頻繁 Join、鍵值重複率高、資料修改較少 的主從表 (如訂單/訂單明細)。
限制:不支援分區、全表掃描變慢、DML 開銷大、不可單獨 Truncate 其中一表。
WHERE UPPER(name)='ABC'、WHERE id+1=100、WHERE char_col = 123 皆導致索引失效。需建立函數索引 (FBI) 或修正 SQL。ANALYZE INDEX ... VALIDATE STRUCTURE 或 DBMS_STATS 收集統計,防止優化器誤判。INDEX_STATS 中 HEIGHT、LF_BLKS、DEL_LF_ROWS,重建條件:高度 > 4、刪除行 > 20%、碎片率高。DISABLE INDEX → LOAD → REBUILD INDEX 比逐行維護快數量級。V$SEGMENT_STATISTICS / DBA_HIST_SEG_STAT 找出「從未被使用」的索引,果斷 DROP 釋放空間與 DML 開銷。