首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 索引應用深度分析:B*Tree vs Bitmap、管理成本、DML 影響測試與功能分類

     編輯:Oracle 資料庫相關知識

一、索引管理成本三大項

  1. 磁盤空間(索引段佔用);
  2. DML 維護開銷(INSERT/UPDATE/DELETE 需同步更新索引);
  3. 額外回滾段空間(索引變更產生 UNDO)。

二、DML 影響實測數據(1 萬行插入)

索引配置平均耗時增長率
無索引2.9 秒基線
單列索引 (A)6.7 秒+131%
雙列索引 (A,B)10.3 秒+255%
三列索引 (A,B,C)11.7 秒+303%

結論:索引數量與 DML 耗時近似線性正相關,寫密集表嚴格控制索引個數。

三、按存儲分類

四、按功能分類

  1. 唯一索引:約束+訪問雙重角色,每條記錄對應唯一 ROWID;
  2. 非唯一索引:純訪問加速;
  3. 函數索引:CREATE INDEX idx_upper_name ON emp(UPPER(ename)),支援函數條件查詢;
  4. 反向鍵索引:REVERSE 反轉鍵值分散熱塊,緩解右側增長熱點;
  5. 壓縮索引:COMPRESS n 前綴壓縮,節省空間、提高緩存命中;
  6. 位圖連接索引:預連接維度表,星型查詢無需實時 JOIN。

五、索引選型決策樹

IF 查詢模式 = 精確點查/範圍掃描 AND 選擇性 > 1% THEN B*Tree
ELSE IF 查詢模式 = 多低基數列組合 AND 環境 = DW/報表 THEN Bitmap
ELSE IF 條件包含函數表達式 THEN Function-based Index
ELSE IF 主鍵/唯一約束 THEN Unique Index
ELSE 考慮全表掃描 + 並行

六、維護最佳實踐

  • 定期 ANALYZE INDEX ... VALIDATE STRUCTURE 或 DBMS_STATS.GATHER_INDEX_STATS;
  • 碎片化嚴重(HEIGHT 增長、DEL_LF_ROWS 佔比高)→ ALTER INDEX ... REBUILD [ONLINE];
  • 監控 V$SEGMENT_STATISTICS 索引掃描效率,長期未用索引果斷 DROP。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
類型結構特點適用場景避坑
B*Tree分支塊+葉塊,類似書目錄,高扇出、平衡樹高選擇性、OLTP 精確查找、唯一約束低基數列(性別、狀態)建 B*Tree 極差
Bitmap位圖偏移映射 ROWID,極度壓縮低基數、DW 星型查詢、多條件 AND/OR 組合OLTP 高併發 DML 易產生鎖爭用/死鎖