MySQL 用于衡量数据查询的效率是 磁盘 I/O 次数,一般来讲索引比较大,尤其是对于关系型数据库这种数据量俺的所以能达到亿级别的,为了节省内存的使用,一般会将索引存储到磁盘中
当 B树 或者 B+ 树作为索引结构的时候,它们有一个共同的特点,每一层节点的数目比较多,但是层数很少,这样做的目的是为了减少磁盘 I/O 的次数,但是对于 B 树,它的每一个节点还包含有 data 域,这样的话就增大了节点的大小,其实就是增加了磁盘 I/O 的次数,因为磁盘 I/O 一次读取出的数据量大小是固定的,单个数据变大,每次读取出的就少,导致磁盘 I/O 的次数增多,而对于 B+ 树,除了叶子节点以外的其他节点都没有存储 data 域,每个节点小,磁盘 I/O 的次数也少,B+ 树中的 data 域是存储在叶子节点中,并且所有叶子节点都有一个链指针,这样只需要遍历叶子节点就能获取到所有的数据,能实现范围查询,在数据查询的场景中,范围查询的使用频率很高,但是 B 树不支持这种遍历操作