B-Tree
B-Tree(B树)是一棵多路搜索平衡查找树,相对于二叉树,B树的每个节点有多个子节点,即多叉(路)。Oracle和MongoDB使用的索引技术就是基于B树的数据结构。
一棵m阶的B-Tree有如下特征(其中ceil(x)是一个取最大值的函数):

B树查找
假设现在有一个初始状态为3阶的B树,我们以查找13为例:
B+Tree(B+树)

相对于B树,B+树有四点不同:
因此,相对于B树,B+树有以下优点:
一个B+树能存放多少数据
在MySQL中InnoDB的默认页大小为16KB,这个值可以修改;
查询命令如下:
SHOW VARIABLES LIKE 'innodb_page_size';

InnoDB中的聚簇索引B+树的一个节点被设计为一页,一页大小在InnoDB中默认为16KB,假设主键索引类型为bigint(8Byte),指针在InnoDB中为6Byte,共14字节。因为在非叶子节点中的Key值就会对应一个指针,即N个Key+N个指针,那么16KB能存放16*1024/14=1170个索引指针。
假设一条数据大小为1KB,那么叶子节点可以存储16条数据,对于2阶的B+树则会有1170个叶子节点,那么最多可以存放18,720(1170*16)条数据。而对于3阶的B+树,最多可以存放21,902,400(1170*1170*16)条数据。
由此可见3阶B+树就能满足千万级的数据存储需求,因此,16KB页面大小还是很合理的。