1. 程式人生 > 其它 >【MySQL】B+樹索引深度計算

【MySQL】B+樹索引深度計算

問題

  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萬的資料