Mysql使用B+Tree作为存储结构常见问题

索引:帮助mysql高效获取数据的排好序的数据结构

mysql中索引有二叉树、红黑树、Hash表、B-Tree,但是在mysql中使用最多的是B-Tree结构存储数据而不是其他几种,原因如下:

1.对于二叉树和红黑树,查询的效率与树的高度有关,当数据量有几千W时,其树的高度就会很大不便于遍历,且红黑树插入数据时需要对树进行调整。

2.对于B+Tree来说:

                a.其叶子节点不仅包含所有索引的字段,他们直接还通过指针进行连接,提高了区间访问的性能,可以实现横向遍历

                b.非叶子节点不存储data,只存储索引,其通过页的方式设计,且只有三层,数据按照主键递增的方式存储,也就是节点中的数据索引从左到右递增排列,每一页的第一个数据是下一页最小也就是第一个索引,最下面一层的叶子节点存放索引和数据,当要查询时候,从根节点开始,通过折半查找的方式定位到要查找字段的范围,之后再到第二层的范围中再次使用折半查找,最后跑到第三层也就是最后一层找到数据,一共只需经历三次查找遍历,大大提高查找性能。

3.对于Hash结构来说,通过某种方法构建hash表,计算每一个关键字的hash值,然后存储到hash表中,在通过链表将这些数据连接起来。虽然hash表查找效率很高也就是说只需要计算一下关键字的值,然后直接在hash表里面查找就可以了,但是该方式只适用于查找一个数,而不适用于范围查找,而b+树各个索引直接使用指针连接,可以实现范围查找。

4.为什么要使用主键递增的方式:mysql使用的是B+树作为存储结构,如果使用主键递增的方式存储数据,每次插入数据时,只需直接在每一页的最后插入就行了,而若不使用主键递增的方式,当在某一页中间的位置插入数据时,还要设计到分页以及树的调整问题,使得效率开销变大。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

鹏之翼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值