首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 索引類型選擇指南:B-Tree vs Bitmap 適用場景與效能考量

     編輯:Oracle 資料庫基礎

索引如字典目錄,能讓資料庫快速定位資料而非全表掃描。但索引非越多越好,維護成本(DML 時同步更新)與查詢效能需取得平衡。本文詳細比較 B-Tree 與 Bitmap 索引適用場景、基數概念、複合條件優勢、NULL 值處理,並提供選擇決策樹。

核心概念:基數

基數 = 欄位不重複值的數量。
範例:gender (M/F) 基數=2;marital_status (單/已婚/離) 基數=3;id_card_no 基數≈資料列數(高基數)。

B-Tree 索引(標準索引)

  • 結構:平衡樹,儲存排序後的鍵值 + ROWID。
  • 適用:高基數 欄位(PK、UK、流水號、時間戳)。
  • 特點:範圍掃描、排序、唯一性約束支援完善。
  • 缺點:低基數欄位建立 B-Tree,單一鍵值對應大量 ROWID,掃描成本高。

Bitmap 索引

  • 結構:對每個不重複值建立一個位圖,位元 1 代表該列擁有該值。
  • 適用:低基數 欄位(性別、狀態碼、類別、地區)。
  • 優勢:
    1. 位圖可直接進行 AND/OR 位元運算,多條件組合極快。
    2. 支援 IS NULL 查詢(B-Tree 預設不索引 NULL)。
    3. 儲存空間極小(低基數時)。
  • 缺點:
    1. DML 並發嚴重鎖定(位圖片段鎖定範圍大),不適合高併發 OLTP 寫入。
    2. 範圍條件(>、<、!=)無優勢,仍建議 B-Tree。

三大適用場景決策樹

  1. 基數低 + 需頻繁查詢 → Bitmap(如「已婚女性」gender='F' AND marital='Y')。
  2. WHERE 條件多重 AND/OR 組合 → Bitmap(位圖合併運算)。
  3. 需查詢 NULL 值 → Bitmap(唯一能高效處理 WHERE col IS NULL 的索引)。

其他情況(高基數、範圍查詢、高併發寫入、排序需求)優先選 B-Tree。

實戰建議

  • 資料倉庫/OLAP 環境:大量低基數維度欄位 → 多用 Bitmap,配合 Star Transformation。
  • OLTP 核心交易表:寫入頻繁 → 嚴格限制索引數量,優先 B-Tree,Bitmap 僅用於極少更新的旗標欄位。
  • 複合索引:將「最常用於等值過濾的高基數欄位」放前面,低基數旗標放後面(或改用 Bitmap)。
  • 監控:定期查詢 V$SEGMENT_STATISTICS 或 USER_INDEXES 的 BLEVEL、LEAF_BLOCKS,評估索引健康度。

「寧缺勿濫」是索引設計鐵律。依據基數、查詢模式、寫入頻率三維度決策,才能在查詢加速與維護成本間找到最佳平衡點。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved