Mysql - 索引为什么使用B+树结构

索引较快的方式首先想到的就是二叉树,但是二叉树分布不均匀,容易形成部分链表,之后想到可以使用平衡二叉树,但是平衡二叉树也不行,原因如下:

操作系统与磁盘一次数据交换的单位是页,一页4K,即每次IO操作都会将4K内容加载到内存中,但是二叉树每个节点只保存一个关键字,一个数据区,两个子节点的引用,不够填满4K的空间,辛苦做了一次IO,却只加载了一个关键字,在树的高度很高,恰好又搜索的关键字位于叶子节点或者支节点的时候,取一个关键字要做很多次的IO,这显然是很耗费性能的。

为了解决这个问题,便使用B+树,即多路树解决这个问题, B+树作为索引的特点:

  1. 多路树,树的高度比较矮,减少磁盘IO
  2. 叶子节点自成链表,范围查询及排序走索引(排除执行优化)
  • B+树结构


    Mysql - 索引为什么使用B+树结构_第1张图片
注意
  1. B+树返回查询和order by 都走索引
  2. 用explain验证的时候有时没有走索引是因为执行引擎会根据数据量及IO等方面自动判定是否走索引,例如查询的数据量本身很小,就不需要走索引,或者走索引处理会更耗时,就选择全表扫描。

参考

  1. 深入理解MySQL索引之B+Tree

你可能感兴趣的:(Mysql - 索引为什么使用B+树结构)