參考:https://mp.weixin.qq.com/s/BWlkrHiB-uP6fDnsxtKU0Q
問:一棵B+數可以存放多少行數據。
這個就得因地制宜了。首先,InnoDB底層的數據頁大小默認為16KB,一般來說,生產環境一行數據為1KB左右,那么一個數據頁可以存放16條數據。剩下的只要計算有多少個數據頁就行了。
InnoDB的一個頁可以為索引頁,也可以為數據頁。數據頁上文已分析。對于索引頁,里面數據是怎么存放的呢?索引頁存放的是主鍵和指針(6 Byte),若建表時沒有指定主鍵,mysql會自動創建一個6Byte的主鍵。一般數據庫中我們使用bigint的自增id作為主鍵(8Byte),那么一個<主鍵,指針>對大小為14Byte。一個16KB的索引頁可以存放161024/14=1170個單元。
一般樹高為3層,那么對應的數據頁有11701170個,數據行數為1170117016=2000W行。
同時B+樹相對于B樹的優點在于,B+樹只在葉子節點存放數據,那非葉子節點的出度就高了,樹會矮胖,而B樹會瘦高,自然查詢同樣的數據B+樹的IO次數更少。