索引類型的選擇需結合查詢場景與數據特征:
UPPER(name)、TO_CHAR(create_time))設計,解決函數導致索引失效的問題。SELECT name, age FROM employees WHERE dept_id = 10,索引包含dept_id、name、age),避免回表訪問,提升查詢速度。WHERE子句(過濾條件)、JOIN子句(關聯字段)、ORDER BY子句(排序字段)中的列,如訂單表的order_date、用戶表的login_name。(dept_id, employee_id)的順序優于(employee_id, dept_id)。INSERT、UPDATE、DELETE操作的開銷(需維護索引結構),建議單表索引數量不超過5-10個。quantity字段頻繁修改,建索引會導致更新操作變慢。WHERE UPPER(name) = 'JOHN'、WHERE salary + 1000 > 5000),會導致索引無法識別。IS NULL、IS NOT NULL條件(Oracle無法高效使用索引定位空值)。NOT操作(如WHERE NOT dept_id = 10),會強制全表掃描。/*+ INDEX(table_name index_name) */強制查詢使用指定索引,適用于優化器選錯索引的場景(如SELECT /*+ INDEX(emp idx_emp_dept) */ * FROM employees WHERE dept_id = 10)。dept_id、name,查詢SELECT dept_id, name FROM employees WHERE dept_id = 10無需訪問表數據)。ORDER BY子句中的列創建索引,且順序與索引列一致(如ORDER BY create_time DESC,索引應為(create_time DESC))。ALTER INDEX index_name REBUILD命令重建,回收空間并優化結構。對于分區索引,可使用ALTER INDEX idx_name REBUILD PARTITION partition_name單獨重建。V$INDEX_USAGE_INFO視圖查看索引的使用頻率(如USER_SEEKS、USER_SCANS),或使用AWR/ADDM報告分析索引性能瓶頸(如未使用的索引可刪除)。COMPRESS 1),減少索引存儲空間(可降低30%-50%),提升查詢性能(減少I/O)。(dept_id, employee_id),查詢WHERE employee_id = 100),Oracle會跳過前導列,直接掃描后續列,適用于前導列選擇性低但整體查詢條件選擇性高的場景。ALTER INDEX index_name REBUILD PARALLEL 4),利用多CPU核心加速處理,縮短維護時間(需根據系統負載調整并行度)。