在Oracle資料庫中,建立索引不會改變SQL語句的語法,也不会直接影響應用程式的邏輯,這就像字典即使沒有目錄仍可使用一樣。但若缺少目錄,查閱特定條目就得翻遍全書;資料庫同理,缺乏索引時查詢需掃描全表,資料量大時效能急劇下降。合適的索引是提升查詢效率的關鍵工具,但「索引越多越好」是危險的誤區。每筆DML操作(INSERT/UPDATE/DELETE)都會觸發所有相關索引的維護,過多索引反而拖垮整體效能。原則是「寧缺勿濫」,根據業務特徵精準選型。
基數是指欄位中不重複值的數量。性別(男/女)、婚姻狀態(已婚/未婚/離婚)、民族等欄位基數極小,極適合建立Bitmap索引。標準B-Tree索引在低基數欄位上會返回大量ROWID,導致大量表存取;而Bitmap索引為每個唯一值建立一個位圖,相同值對應相同位模式,查詢時只需位元運算即可快速定位符合條件的行,效率極高。
當查詢條件包含多個AND或OR邏輯運算時,多個Bitmap索引可透過位元運算快速合併,直接得出結果集,避免多次索引掃描與表存取。但需注意:此優勢僅限於等值比較(=)、IN、AND/OR組合;若涉及範圍查詢(>、<、!=、LIKE '%...'),B-Tree索引通常更具優勢。
標準索引預設不存儲完全為NULL的鍵值,故「WHERE col IS NULL」無法利用索引加速。Bitmap索引會記錄NULL值,此類查詢必須使用Bitmap索引才能獲得效能提升。
索引選型無標準答案,核心在於「理解業務存取模式」。低基數、多條件組合、NULL查詢 → Bitmap;高基數、範圍查詢、OLTP高併發DML → B-Tree;定期監控索引使用情況(V$OBJECT_USAGE),刪除未被使用的索引,才能在查詢效能與維護成本間取得平衡。