mysql为什么使用B+树,而选择二叉树、B树创建索引

mysql是怎么依据索引提升查找效率的?

有如下一个mysql数据表,使用c2列创建索引,在磁盘上会生成一个索引文件表。下图以二叉树结构举例创建了一个索引表。在没有索引的情况下,要查找数据需要一行一行查找,搜寻一行就产生一次IO操作,效率上肯定是比较慢的。如果创建索引表,我们就可以先查询索引,再根据查找到的节点指向,就可以寻找到mysql数据表中对应的数据了。这样就减少了搜索次数,从而提高效率。

各数据结构创建索引对比 

二叉树

每查找一个节点,就相当于一次IO操作。当一张表的数据十分庞大时,二叉树的深度就会变大,这样即使创建了索引其实对查询快慢也并没有提升多少。

B树

 B树相对于二叉树而言,它在节点上可以存放多个不同节点,以此减小树的深度(上图举例中:每个节点最多存在三个,其实还可以有更多)。

分享一个在线演示生成B树的网站B-Tree Visualization

生成B+树

B+树

 B+树相对于B树的改变在于;叶子节点包含了所有索引字段。叶子节点之间形成链表,且是一个升序链表。这样的好处:可以提高区间的访问性能,在项目中会存在大量的范围查询,在子节点中查找到了数据,就可以顺着链表依次向后查找,从而避免了全表查询。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

IABQL

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

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

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

打赏作者

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

抵扣说明:

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

余额充值