MySQL索引详解

B-树

在B-树中,无论中间节点还是叶子节点都带有卫星数据(数据行记录)
MySQL索引详解

B+树

在B+树中,只有叶子节点带有卫星数据,中间节点仅仅是索引。
MySQL索引详解
在MySQL中,主键索引的叶子节点直接包含数据行记录,二级索引叶子节点则包含主键键值,需要回表,即回主键索引中查找数据行记录

B+树相比B-树的优势

磁盘IO次数更少

B+树的每个节点都对应着一个磁盘页,树的高度意味着查询所经历的磁盘IO的次数。

由于B+树中间节点不包含数据记录,所以同样大小的磁盘页可以容纳更多的节点元素(关键字),B+树比B-树更加“矮胖”,磁盘IO次数更少。

查询性能更稳定

B+树的查询必须查到叶子节点,而B-树只要找到匹配元素即可,无论位于中间节点还是叶子节点,因此B-树查找性能不稳定(最好只查到根节点,最坏到叶子节点)

范围查询更简单

对于范围查询,比如要查3-11之间的元素
B-树的范围查找过程

  • 自顶向下,查找到范围的下限(3)
  • 中序遍历到元素6
  • 中序遍历到元素8
  • 中序遍历到元素9
  • 中序遍历到元素11,遍历结束
    MySQL索引详解B+树的范围查找过程
  • 自顶向下,查找到范围的下限(3)
  • 通过链表指针,遍历到元素6, 8
  • 通过链表指针,遍历到元素9, 11,遍历结束
    MySQL索引详解
    参考:https://blog.****.net/qq_35571554/article/details/82759668
    微信公众号:程序员小灰