索引是資料庫管理系統中一個排序的資料結構,以輔助快速查詢、更新資料表資料。實現通常採用 B 樹 及其變種 B+ 樹。
除了資料本身,資料庫系統維護滿足特定尋找演算法的資料結構,這些結構以指標引用資料,使高級尋找演算法得以在其上執行——這就是索引。
| 代價 | 收益 |
|---|---|
| 增加儲存空間 | 唯一性索引保證資料唯一 |
| INSERT/UPDATE/DELETE 需同步維護索引,耗時 | 大幅加速資料檢索(核心理由) |
| 聚簇索引空間更大 | 加速表連結、參考完整性檢查 |
| 分群/排序子句效能顯著提升 | |
| 優化器可利用索引產生更優執行計畫 |
WHERE、JOIN ON、ORDER BY、GROUP BY 的欄位TEXT、BLOB、BIT 等大物件/低基數類型h 極小(出度 d 通常 > 100),h ≤ 3 覆蓋千萬級資料。h-1 次磁碟 I/O,漸近複雜度 O(log_d N)。h 明顯更深,I/O 次數大增。| 特性 | B 樹 | B+ 樹 |
|---|---|---|
| 節點內容 | 鍵值 + 資料指標 | 非葉節點僅存鍵值(索引),葉節點存全量鍵值 + 資料指標 |
| 資料分布 | 資料分散在各層節點 | 所有資料集中在葉節點,葉節點雙向鏈表串聯 |
| 查詢路徑 | 命中即回傳,可能不達葉節點 | 無論成否,必走至葉節點(層數固定) |
| 範圍查詢 | 需中序遍歷,較慢 | 葉節點鏈表掃描,極快 |
| 插入/刪除 | 複雜,可能在非葉節點 | 僅在葉節點操作,較簡單 |
BETWEEN、>、< 等範圍查詢零成本定位起點、順序讀取。O(log_d N) 極低 I/O 查詢。d > 100,h ≤ 3,百萬級表單次查詢 ≤ 3 次 I/O。EXPLAIN 輸出中 type=ref/range/index/ALL 對應的 B+ 樹遍歷行為圖片來源:原文保留之示意圖(https://img13.3lian.com/...),如失效請自行補充 B+ 樹結構圖。