参考: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次数更少。