Oracle 提供多種索引結構,各有適用場景:
B-Tree 索引結構類似 UNIX inode。每個索引區塊對應樹中的一個節點:
(索引鍵值, ROWID) 配對,指向表中實際資料列。隨著資料插入,區塊填滿時會發生 分裂,產生新節點。Oracle 內部管理區塊內的指標分配,因此索引不支援 PCTUSED 參數。
在其他條件相同時,大區塊(如 32K)可容納更多索引鍵,使樹結構更扁平(Height 降低),減少一致性獲取次數,提升分散讀取效能。Christopher Foot 指出:「更大的區塊意味著分支節點有更多空間存儲索引鍵,從而降低樹高度並提高索引查詢效能。」
測試環境:Oracle 9i,表 eradmin.admission 15 萬筆,patient_id 有索引。查詢 patient_id BETWEEN 1 AND 40000,執行計畫為 INDEX FAST FULL SCAN。
| 指標 | 8K 表空間 | 16K 表空間 |
|---|---|---|
| Consistent Gets | 421 | 211 |
| Physical Reads | 0 | 0 |
| Rows Processed | 1 | 1 |
邏輯讀次數減半,證實大區塊顯著降低索引掃描開銷。Oracle 9i+ 多區塊大小特性配合大緩衝區,值得在生產環境試驗。
多區塊大小特性確能提升索引效能;索引重建在特定情境確有助益。期待 10g 自動維護任務將索引優化納入自動化閉環。