mysql中的索引数据结构

mysql的索引使用B+树的原因

大致有以下两方面的原因,一个是单位时间内获取到的结果,二是每个节点读取的时间成本

对于查找来说,一般二分查找(例如平衡二叉树)能极大提高查找的效率

存储层次

计算机的存储从上到下大致可以分为寄存器、高速缓存、主存储器、辅助存储器。其中主存储器,也就是我们常说的内存;辅助存储器也被称为外存,比较常见的就是磁盘、SSD,可以用来保存文件。在这个存储结构中,每一级存储的速度都比上一级慢很多,所以程序访问越上层存储中的数据,速度就会越快

  • 相较与二叉树,B+树每次查询节点能得到更多的数据,因此在B+树中,查询所需的节点比二叉树要少得多

节点读取的时间消耗

对于操作系统来说,把磁盘读取到内存中的单位,每次读取都需要完整的读取一页的数据,一般来说4kb

如果一个节点的大小小于一页的大小,那么就会有一部分时间花在读取我们根本不需要的数据上(节点之外的数据),二叉树在这方面就会浪费很多时间;而如果一个节点的大小大于一页,哪怕是一页的整数倍,那我们也可能在一个节点的中间就找到了我们需要的指针进入了下一级的节点,这样这个指针后面的数据都白白读取了,如果不需要这些数据可能我们就可以少读几页了。

  • 对于索引来说,能使用一个节点大小刚好就是该操作系统一页的大小的数据结构就是效率最高的
  • B+树可以满足上述条件