那么,MySQL中B+树的一个节点大小为多大呢?
这个问题的答案是“1页”,这里说的“页"是MySQL自定义的单位(其实和操作系统类似),MySQL的Innodb引擎中一页的默认大小是16k(如果操作系统中一页大小是4k,那么MySQL中1页=操作系统中4页),可以使用命令SHOW GLOBAL STATUS like 'Innodb_page size';查看。并且还可以告诉你的是,一个节点为1页就够了。
为什么一个节点为1页(16k)就够了?
解决这个问题,我们先来看一下MySQL中利用B+树的具体实现。
MySQL中MylSAM和innodb使用B+树
通常我们认为B+树的非叶子节点不存储数据,只有叶子节点才存储数据;而B树的非叶子和叶子节点都会存储数据,会导致非叶子节点存储的索引值会更少,树的高度相对会比B+树高,平均的I/O效率会比较低,所以使用B+树作为索引的数据结构,再加上B+树的叶子节点之间会有指针相连,也方便进行范围查找。
上图的data区域两个存储引擎会有不同。
MyISAM中的B+树
MYISAM中叶子节点的数据区域存储的是数据记录的地址
主键索引