mysql使用B+-Tree作为索引数据结构的原因

Mysql使用的是B+-Tree,时间复杂度是O(log n)

Hash索引的复杂度是O(1),如果是查找一个数的话,使用Hash是很好的选择,但是对于范围查询,模糊查询都不支持,并且由于Hash函数的随机性,通常其对内存的访问也是随机的,会造成频繁的IO,然而在数据库性能调优方面,有一个点就是要减少不必要的IO,然而Mysql并没有放弃这种快速搜索等值的查询方式,而是根据数据库访问频率和模式自动的为数据建立哈希索引,称之为自适应哈希索引。

再说说二叉树,如果左子树不为空,则左子树上所有节点均小于根节点,右子树节点均大于根节点,这种数据结构非常适合数据的查找,但是有个致命的确定就是二叉搜索树的树形取决于数据的输入顺序,在极端的情况会退化成链表。造成了二叉搜索树搜索效率的不稳定型。

此时平衡二叉树的出现解决了二叉树存在的问题,它是一种能够自动调整树形(保证数据顺序的基础上,又能维持树型),并且保证每个节点的左右子树高度不超过1。但是这种树在插入数据时进行调整可能需要进行大量的数据移动,恰恰由于平衡二叉树过于严格的平衡要求,使得每一次的插入和删除都需要耗费大量的资源去进行调整树型结构,从而使它的性能大打折扣。

红黑树能够有效减少节点的移动次数,它不像平衡二叉树一样严苛,但是又维持了平衡二叉树能够快速查找数据的优势,但由于红黑树的深度过大,数据检索的时候会造成磁盘IO频繁,因此,Mysql也并未将其作为索引实现。

B-Tree是一种自平衡的多叉查找树,一个节点可以拥有两个以上的子节点,其索引与数据存储在一块。由于Mysql索引一般都存在在内存中,而内存资源往往比较宝贵,一定内存的情况下可以存储的索引数量相对有限,就导致了不适合使用索引与数据存储在一起的数据结构,并且B-Tree对于顺序查询并不友好。

B+-Tree是B-Tree的加强版,主要不同点是B+-Tree的数据只存在叶子节点中,并且叶子节点之间通过指针相连,为双向链表结构,这种数据结构解决了内存资源宝贵只能存储索引的问题,也解决了顺序查询中频繁IO的问题。

 

总结:B+-Tree的优点:

1.树高很低,在存储大数据情况下,依然能保持较少的磁盘IO

2.支持范围查询,有序性查询

3.索引和数据分开存储,让更多的索引存储在内存中

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值