問題
bigint類型字段作為做為主鍵索引,一顆深度為3的B+樹能存放多少個索引數據
分析
1.MySQL數據組織的最小單位是頁,也叫數據頁,每個數據頁大小是16KB,索引也是存放在索引的數據頁中
2.主鍵索引是聚簇索引,結合B+樹的數據結構,主鍵索引在非葉子節點上不存儲數據,僅在葉子節點上才存儲完整的數據,因此深度第1層和第2層的數據頁中不存儲數據
3.bigint字段占用內存大小是8Byte,由B+樹的排列方式可知,兩個索引之間存放了指向下一個節點的指針,指針大小約為6Byte(基於C++實現的MySQL中的指針計算而來的經驗值)
4.索引遍歷都是從根節點,根節點近有一個,根節點可存放的索引數據大約為 16*1000/(8+6) 約等於 1140 個索引值,1140個索引值中,相鄰間隔的索引具有指向下一個節點的指針
因此,下一層深度的B+樹可存放的數據量約為1140*1140=130萬,葉子節點每個節點數據頁為16K,已每行數據占用1K來計算(1K是估算值),每個葉子節點可以存放16行數據
因此
bigint類型字段作為做為主鍵索引,一顆深度為3的B+樹能存放大概1140*1140*16=2000萬的數據