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

Oracle 索引樹結構深度解析:B-Tree、位圖索引與區塊大小效能影響

     編輯:Oracle 資料庫基礎

索引類型總覽

Oracle 提供多種索引結構,各有適用場景:

  • B-Tree 索引:標準樹狀索引,自早期版本沿用至今,適用於高基數欄位。
  • 位圖索引:適合低基數欄位(如性別、狀態碼),在唯讀/資料倉庫環境極快,但頻繁 DML 會造成嚴重鎖爭用。
  • 位圖連接索引:針對星狀模式查詢,預先連接維度表欄位建立索引,語法獨特(含 FROM/WHERE 子句)。

B-Tree 索引內部機制

B-Tree 索引結構類似 UNIX inode。每個索引區塊對應樹中的一個節點:

  • 分支節點:儲存指向下層索引區塊的指標。
  • 葉節點:儲存 (索引鍵值, ROWID) 配對,指向表中實際資料列。

隨著資料插入,區塊填滿時會發生 分裂,產生新節點。Oracle 內部管理區塊內的指標分配,因此索引不支援 PCTUSED 參數。

影響單一節點容納索引鍵數量的兩大因素

  1. 索引鍵長度
  2. 索引表空間的區塊大小

區塊大小對索引樹高度與效能的影響

在其他條件相同時,大區塊(如 32K)可容納更多索引鍵,使樹結構更扁平(Height 降低),減少一致性獲取次數,提升分散讀取效能。Christopher Foot 指出:「更大的區塊意味著分支節點有更多空間存儲索引鍵,從而降低樹高度並提高索引查詢效能。」

實測案例:8K vs 16K 表空間

測試環境:Oracle 9i,表 eradmin.admission 15 萬筆,patient_id 有索引。查詢 patient_id BETWEEN 1 AND 40000,執行計畫為 INDEX FAST FULL SCAN。

指標8K 表空間16K 表空間
Consistent Gets421211
Physical Reads00
Rows Processed11

邏輯讀次數減半,證實大區塊顯著降低索引掃描開銷。Oracle 9i+ 多區塊大小特性配合大緩衝區,值得在生產環境試驗。

索引重建爭議與 10g 自動化趨勢

  • 支持派:定期重建可回收碎片、降低樹高度,企業實務常見速度提升。
  • 反對派:B-Tree 空間重用極高效,極少需重建;若有益應有可證明規則。
  • 10g AMT (Automatic Maintenance Tasks):結合 AWR 工作負載資訊庫,自動偵測並重建潛在最佳化索引,邁向自我管理。

結論

多區塊大小特性確能提升索引效能;索引重建在特定情境確有助益。期待 10g 自動維護任務將索引優化納入自動化閉環。

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