索引是为了加速表中数据行的检索而创建的一种分散存储的数据结构

  1. 为什么不用平衡二叉树做索引的数据结构
  • 搜索效率低
    • 一般来说,在树的结构中数据所处的深度决定了它的搜索时 IO 的次数
    • 二叉树分路较少,数据量较多时树的深度就会很深
  • 节点数据内容较少
    • 没有很好的利用操作系统和磁盘的数据交换特性和磁盘预读能力
    • 即操作系统:空间局部性原理
  1. B+ 树
  • B+ 节点关键字搜索采用闭合区间
  • B+ 非叶子节点不保存数据相关信息,只保存关键字和子节点的引用
  • B+ 关键字对应的数据保存在叶子节点中
  • B+ 叶子节点是顺序排列的,并且相邻的节点具有顺序引用关系
  1. 相对于 B 树,为什么使用 B+ 树做索引的数据结构
  • B+ 树扫库扫表能力更强
  • 磁盘读写能力更强
  • 排序能力更强
  • 查询效率更加稳定 (可能比B树慢一些)

MyISAM 搜索引擎下的 B+ Tree 索引

MySQL 中的 B+ Tree 索引
MySQL 中的 B+ Tree 索引

InnoDB 搜索引擎下的 B+ Tree 索引

MySQL 中的 B+ Tree 索引
MySQL 中的 B+ Tree 索引

InnoDB VS MyISAM

MySQL 中的 B+ Tree 索引

相关文章: