B+Tree索引
按顺序存储,每一个叶子节点到根结点的距离是相同的;左前缀索引,适合查询范围类的数据。
在InnoDB存储引擎中,一颗的B+树可以存放多少行数据?
我们可以大概的估算一下
假设一颗B+树的高度为2层,即有一个根节点和若干个叶子节点。
那么这颗树理论上可以存放的,总行记录数=根节点指针数 * 单个叶子节点记录的行数。
我们先计算叶子节点:
B+树中单个叶子节点大小为16K,假设每一条记录是1K,一个叶子节点能存放的记录数就是16K/1K=16。
然后再计算非叶子节点:
非叶子节点可以存放多少个指针呢?
假设主键ID是索引,它的数据类型为bigint,长度是8B。
InnoDB中一个指针的大小是6B。
8B+6B=14B,也就是14个字节。
所以可以计算出,指针数=16KB/14B=16 * 1024 / 14 = 1170.28571,大约是1170个指针。
因此,我们可以得出,一颗两层高的 B+Tree 大约可以存放 1170 * 16 =18720 条记录。
以此类推,一颗三层高的 B+Tree 大约可以存放 1170 * 1170 * 16 = 21902400 条记录。
所以在InnoDB中 B+树 高度一般为2-3层,可以满足千万级的数据存储。