原文网址:MySQL原理--索引的原理_IT利刃出鞘的博客-CSDN博客

简介

本文介绍MySQL的索引的原理。

MySQL的索引默认是使用B+树来实现的。

B+ 树索引并不能找到一个给定键值的具体行。B+ 树索引能找到的只是被查找数据行所在的页。然后数据库通过把页读人到内存,再在内存中进行查找,最后得到要查找的数据。 

B+ 树的特点(相对于B 树)

  1. 叶子节点(最底部的节点)才会存放实际数据(索引+记录),非叶子节点只会存放索引;
  2. 所有索引都会在叶子节点出现,叶子节点之间构成一个有序链表;
  3. 非叶子节点的索引也会同时存在在子节点中,并且是在子节点中所有索引的最大(或最小)。
  4. 非叶子节点中有多少个子节点,就有多少个索引;

下面通过三个方面,比较下 B+ 和 B 树的性能区别。

B+ 树对比B树的优点

查询的速度

B+树速度快

B+ 树可以比 B 树更矮胖,查询底层节点的磁盘 I/O次数会更少。因为B+ 树的非叶子节点不存放实际的记录数据,仅存放索引,因此数据量相同的情况下,相比存储即存索引又存记录的 B 树,B+树的非叶子节点可以存放更多的索引。

B树的速度慢

B 树进行单个索引查询时,最快可以在 O(1) 的时间代价内就查到,而从平均时间代价来看,会比 B+ 树稍快一些。

但是 B 树的查询波动会比较大,因为每个节点即存索引又存记录,所以有时候访问到了非叶子节点就可以找到索引,而有时需要访问到叶子节点才能找到索引。