1. 計算 B+ 樹能存儲多少數據
參數設定
- 每個數據頁(Page)大小:16KB(16384 字節)
- 每個索引節點存儲的子節點數量:
- 索引項大小:
- 假設 bigint(主鍵)占 8 字節
- 每個索引項存儲 8(主鍵)+ 6(指針)= 14 字節
- 每個 16KB 頁能存儲的索引項數:
16384 / 14 ≈ 1170
(即每個節點可存 1170 個子節點)- 即:每個節點(頁),可以存儲1170個索引節點
- 索引項大小:
計算三層 B+ 樹的存儲量
- 第一層(根節點):最多存儲 1170 個指向中間節點的指針
- 第二層(中間層):每個中間節點存儲 1170 個指向葉子節點的指針,共
1170 × 1170 = 1369000
個指針 - 第三層(葉子節點):
- 每個葉子節點存儲 16KB / 1KB = 16 條數據(假設數據記錄大小為 1KB)
- 總存儲量:
1369000 × 16 ≈ 21924000
(約 2000 萬條記錄)
2. 結論
? 三層 B+ 樹在 MySQL InnoDB 中大約能存 2000 萬條記錄。
? **如果增加一層(四層),則能存 1170 × 1170 × 1170 × 16 ≈ 25.6 億條數據,數據量擴展能力極強!
? B+ 樹的層級較低,查詢時磁盤 I/O 更少,性能更優!
這個計算方式比之前的百萬級估算更加精準,關鍵在于 數據頁大小、索引項大小、層級計算方式,可以用于實際評估 MySQL 索引的存儲能力。🚀