Mysql为什么选择B+树作为索引结构,而不是红黑树

本文探讨了数据库索引的选择,尤其是Mysql为何使用B+树而非红黑树。B+树因其高效的查询性能,尤其是范围查询和磁盘预读特性,成为理想的索引结构。总结了包括Hash索引、二叉查找树、平衡二叉树、红黑树和B+树在内的多种索引类型及其优劣势。
摘要由CSDN通过智能技术生成

Mysql为什么选择B+树作为索引结构,而不是红黑树

Mysql小技巧


前言

索引(Index)是帮助MySQL高效获取数据的数据结构。可以得到索引的本质:索引是数据结构。
可以理解为“排好序的快速查找数据结构”

在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,

这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。


一、B+树是什么?

B+树是B树的一种变形形式,B+树上的叶子结点存储关键字以及相应记录的地址,叶子结点以上各层作为索引使用。一棵m阶的B+树定义如下:

  1. 每个结点至多有m个子女;
  2. 除根结点外,每个结点至少有[m/2]个子女,根结点至少有两个子女;
  3. 有k个子女的结点必有k个关键字。

B+树的查找与B树不同,当索引部分某个结点的关键字与所查的关键字相等时,并不停止查找,应继续沿着这个关键字左边的指针向下,一直查到该关键字所在的叶子结点为止。

二、不同索引

1.Hash索引

优劣势:
Hash索引底层是哈希表,哈希表是一种以key-value存储数据的结构,所以多个数据在存储关系上是完全没有任何顺序关系的,所以,对于区间查询是无法直接通过索引查询的,就需要全表扫描。所以,哈希索引只适用于等值查询的场景。而B+ 树是一种多路平衡查询树,所以他的节点是天然有序的(左子节点小于父节点、父节点小于右子节点),所以对于范围查询的时候不需要做全表扫描

2.二叉查找树

二叉搜索树的英文名是Binary Search Tree,简称 BST,它是一棵二叉树,具有如下性质::

  1. 若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  2. 若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  3. 左、右子树也分别为二叉搜索树;
  4. 没有键值相等的节点(因此,插入的时候一定是叶子节点)。

优劣势:
解决了排序的基本问题,但是由于无法保证平衡,可能退化为链表。

3.平衡二叉树

平衡二叉搜索树,又被称为 AVL 树,有别于AVL算法,具有以下性质:

  1. 它是一棵空树或它的左右两个子树的高度差的绝对值不超过1;
  2. 左右两个子树也分别为一棵平衡二叉树。

优劣势:
通过旋转解决了平衡的问题,但是旋转操作效率太低。

4.红黑树

红黑树是一种自平衡的二叉搜索树,除了符合二叉搜索树的基本特性外,它还具有以下性质:

  1. 节点是红色或者黑色的;
  2. 根结点是黑色的;
  3. 每个叶子节点都是黑色的空节点( NIL 节点或者 NULL 节点);
  4. 每个红色节点的两个子节点都是黑色的,从每个叶子节点到根的所有路径上不能有两个连续的红色节点;
  5. 从任一节点到其每个叶子节点的所有路径都包含相同数目的黑色节点。

优劣势:
通过舍弃严格的平衡和引入红黑节点,解决了AVL旋转效率过低的问题,但是在磁盘等场景下,树仍然太高,IO次数太多。

5.B+树

优劣势:
在B树的基础上,将非叶节点改造为不存储数据纯索引节点,进一步降低了树的高度;此外将叶节点使用指针连接成链表,范围查询更加高效。
此外, B+树, 主要是查询效率高,O(logN),可以充分利用磁盘预读的特性,多叉树,深度小,叶子结点有序且存储数据。


总结

B+树的数据都会浓郁存储在叶子结点,而且叶子结点之间都有指针指向,这会提高范围查询的效率。
所以B+树才是最适合做查询索引的树结构。

希望这个博客能对你有所益处。我是轻王,我为自己代言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫轻王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值