在innodb存儲引擎里面,最小的存儲單元是頁(page),一個頁的大小是16Kb??捎萌缦旅畈榭矗?/p>
SHOW VARIABLES LIKE 'innodb_page_size'
image.png
這就說明了一個頁的大小為16384b,也就是16kb。
image.png
如果是3層的B+樹,即存在一個根節點、若干個中間節點、若干個葉子節點,那么這棵B+樹的存放總記錄數為:根節點指針數 x 中間節點數 x 單個葉子節點記錄行數。因為單個頁的大小為16kb,而一行數據的大小為1kb,也就是說一頁可以存放16行數據。然后因為非葉子節點的結構是:“頁指針+鍵值”,我們假設主鍵ID為int類型,長度為11字節(byte),而指針大小在InnoDB源碼中設置為6字節(byte),這樣一共17字節(byte),因為一個頁可以存放16384byte,所以一個頁可以存放的指針個數為16384/17=963個。因此一個3層的B+樹可以存放的數據行的個數為:963 x 963 x 16=14849000(行)。也就是說一個三層的B+樹就可以存放千萬級別的數據了。