B 樹的查找時間複雜度為 O(logm N),其中:
設 B 樹高度為 h(根節點高度為 0),階為 m。根據 B 樹定義:
⌈m/2⌉ 個子女m 個子女因此,節點數最少時(最「瘦」的樹),高度最大:
N ≥ 1 + 2 * (⌈m/2⌉^0 + ⌈m/2⌉^1 + ... + ⌈m/2⌉^(h-1))
≈ 2 * (⌈m/2⌉^h - 1) / (⌈m/2⌉ - 1)
忽略常數項,得到:h = O(log_{⌈m/2⌉} N)
查找從根節點開始,每層進行一次節點內查找(二分查找或線性查找),然後下降到子節點。節點內查找複雜度為 O(log m) 或 O(m),但 m 通常較小(如 100-1000),視為常數。
總複雜度 = 樹高 × 節點內查找 = O(log_m N) × O(1) = O(log_m N)
| 參數 | 對查找性能的影響 |
|---|---|
| 階數 m 增大 | 樹高 h 降低,磁盤 I/O 次數減少(データベース索引通常取 m=100~1000) |
| 關鍵字總數 N 增大 | 對數增長,極其緩慢。例如 m=100, N=10億時,h≈3 |
| 節點內查找算法 | 二分查找 O(log m) 優於線性 O(m),但在內存中差異微乎其微 |
h,性能更穩定,更適合範圍查詢。❌ 誤區:「B 樹查找是 O(log N)」(忽略了底數 m 的影響)
✅ 正確:「B 樹查找是 O(logm N),其中 m 是節點最大度數」
B 樹通過增加節點度數(階數 m)來壓低樹高,將查找複雜度控制在 O(logm N),配合磁盤頁面大小設計節點,實現了極少的磁盤 I/O 次數,成為數據庫索引、文件系統的核心數據結構。