MySQL索引背后的数据结构

MySQL现在使用的引擎是innoDB,是现在MySQL默认的存储引擎。MySQL索引背后的数据结构是一棵B+树,那为什么MySQL不用其他的数据结构,而使用B+树呢。我们学习了很多关于搜索的数据结构,那些都不能够使用吗?

首先二分搜索树不能胜任的原因是,MySQL在存储的数据是在磁盘上的,二分搜索树需要对数据进行比较,每次比较都要进行磁盘IO操作,当数据量大的时候,二叉搜索树的高度就变得很高,每次比较数据就要进行磁盘IO操作,导致效率大大降低,所以二分搜索树不适合。

既然索引的目的是更快的查询,那我们知道哈希表的查找效率是很高的,但是为什么不使用哈希表呢,因为我们MySQL查找数据涉及到区间查询,而哈希表存储的数据是分散的,所以不能达到区间查询的效果,所以我们不使用哈希表。

B树:

要了解B+树,首先我们需要知道什么是B树,B树是把N个数据分成N+1个区间,然后按照各个区间的范围进行存储,相比于二叉搜索树,B树的高度大大降低,虽然比较次数没有减少,但是我们的磁盘IO的次数减少了,所以整体的速度比二叉搜索树快。

B+树:

B+树每个节点上都包含多个Key值,有N个key值分成N个区间,父节点的值都会在子节点体现,父节点会作为最大值或者最小值体现在叶子节点,然后最下面的叶子节点用链表相连。

使用B+树可以减少磁盘IO的次数,因为最下面的叶子节点使用了链表连接之后,非常适合进行范围查找。所有的数据存储在叶子节点上,非叶子节点只需要保存key值,非叶子节点占用的空间较小,甚至可以缓存到内存中,一旦放在内存中,这个时候磁盘IO几乎没有了。所以B+树就像为数据库索引量身打造的结构。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值