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

Oracle B 樹索引深度解析:結構特性、壓縮策略與優化實戰

     編輯:Oracle 資料庫基礎

核心結構特性

1. 非唯一索引的隱藏鍵:ROWID

創建 CREATE INDEX I ON T(X,Y),內部實為 CREATE UNIQUE INDEX I ON T(X,Y,ROWID)。排序規則:先按 (X,Y) 排序,再按 ROWID 升序。唯一索引則僅按鍵值排序。

2. 高度極淺,查找極快

絕大多數 B 樹高度為 2-3 層,定位一條記錄僅需 2-3 次邏輯讀。根塊常駐緩存,分支塊命中率高。

3. 葉塊雙向鏈表,區間掃描零導航

所有葉塊同層,通過雙向指鏈連接。INDEX RANGE SCAN 只需順/逆向遍歷葉鏈,無需回溯分支塊,極大提升範圍查詢吞吐。

進階特性與權衡

4. 索引壓縩

CREATE INDEX I ON T(USERID, USERNAME) COMPRESS 1;
  • 收益:前導列重複值高時,將重複前綴存一次,節省空間、提升緩存命中、減少 I/O。
  • 代價:DML 維護開銷增大(拆分/合併前綴)、查詢 CPU 微增(解壓前綴)。
  • 適用:多列索引前導列基數極低(如狀態碼、類型碼)的場景。

5. 反向鍵索引

CREATE INDEX I ON T(PK) REVERSE;
  • 目的:將遞增序列鍵值反轉分散,消除「右側熱塊」爭用。
  • 限制:不支持範圍掃描,MAX/MIN/BETWEEN 失效。僅適用純點查主鍵(如 Sequence 生成的 PK)。

6. 降序索引匹配 ORDER BY

CREATE INDEX I ON T(COL1 ASC, COL2 DESC);

Oracle 默認索引列升序。查詢含 ORDER BY COL1 ASC, COL2 DESC 時,降序索引可避免排序操作,直接輸出有序結果集。

索引使用的三大黃金場景

  1. 訪問極少量行:瘦表 <2-3%,胖表 <20-25%。
  2. 純索引掃描:查詢列全部包含於索引,無需回表。
  3. 首行響應優化:全表掃描索引以最快返回首批行,犧牲總吞吐換取低延遲(FIRST_ROWS 模式)。

物理存儲真相

  • 索引項按鍵值有序存儲,葉塊間邏輯有序。
  • 索引指向的表塊在堆表中隨機分佈,大量回表時產生離散 I/O。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved