1. 背景
同学在参加阿里面试的时候,被问到了B+树索引能存多少数据。这个问题挺有趣,要是对B+树不太了解,那么这个问题估计也不好回答
那么要回答这个问题,首先要知道B+树的结构是怎样的,存了什么数据,怎么存的,这些东西占多大等
先新建个表
CREATE TABLE IF NOT EXISTS `person`(
`id` INT UNSIGNED AUTO_INCREMENT,
`name` VARCHAR(64) NOT NULL,
PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
2. InnoDB的页结构
-
在InnoDB中,索引默认使用的数据结构为B+树,而
B+树里的每个节点都是一个页
,默认的页大小为16KB
。 -
非叶子节点存的是索引值以及页的偏移量,而叶子节点上存放的则是完整的每行记录
大概认识了页里面存了什么,占多大空间,就可以估计能存放多少条数据了
这里重点关注绿色部分。我也没画太全,还有File Header、Page Header等是什么,有什么用这些就不展开说了,有兴趣的可以自己去翻一下《MySQL技