適當索引能大幅提升查詢效能。本文整理 5 種常見索引的標準建立語法、關鍵字與適用場景速查。
CREATE [UNIQUE|BITMAP] INDEX index_name ON table_name (col1, col2, ...) [TABLESPACE ts_name] [REVERSE] -- 反轉鍵 [COMPRESS n] -- 壓縮前導 n 欄 [LOCAL|GLOBAL ...] -- 分區索引 [PARALLEL n]; -- 並行建立
| 類型 | 語法範例 | 關鍵字 | 適用場景 |
|---|---|---|---|
| 唯一索引 | CREATE UNIQUE INDEX idx_uk ON t(id) TABLESPACE users; | UNIQUE | 強制唯一性約束、PK/UK 自動建立 |
| 組合索引 | CREATE INDEX idx_comp ON t(c1, c2) TABLESPACE users; | 多欄位列舉 | WHERE 條件包含前導欄、覆蓋索引查詢 |
| 反轉鍵索引 | CREATE INDEX idx_rev ON t(seq_id) REVERSE TABLESPACE users; | REVERSE | 遞增序列/時間戳熱點分散,犧牲範圍掃描 |
| 位圖索引 | CREATE BITMAP INDEX idx_bm ON t(status) TABLESPACE users; | BITMAP | 低基數欄位、DSS/倉庫、複雜 AND/OR 組合 |
| 函數基索引 | CREATE INDEX idx_fbi ON t(UPPER(name)) TABLESPACE users; | 運算式 | 查詢含函數運算 (UPPER, TRUNC, SUBSTR 等) |
COMPRESS 2:壓縮組合索引前 2 欄,適合前導欄重複度高。PARALLEL 4:大表建立索引時平行化,建立後記得 NOPARALLEL。ONLINE:11g+ 支援線上建立/重建,DML 不阻塞(需 Enterprise Edition)。INVISIBLE:11g+ 建立隱形索引,優化器忽略,測試效能影響再轉可見。-- 確認索引狀態 SELECT index_name, index_type, uniqueness, status, compression FROM user_indexes WHERE table_name = 'T'; -- 查看執行計畫是否使用 EXPLAIN PLAN FOR SELECT * FROM t WHERE c1 = :b1; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
DBMS_STATS.GATHER_TABLE_STATS(..., METHOD_OPT=>'FOR ALL HIDDEN COLUMNS')。