MySQL数据库为什么索引使用B+树而不是B树

461 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天,点击查看活动详情


  • 💂 个人网站: IT知识小屋
  • 🤟 版权: 本文由【IT学习日记】原创、在CSDN首发、需要转载请联系博主
  • 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦

前言

  MySQL数据库是日常开发或者面试中最常遇到的数据库之一,你在使用过程是否有过类似的疑问:为什么它的索引使用的设计结构是B+树而不是B树呢?下面一起来看看吧。

详解

  在看两者的区别时,先看看两者的数据结构图片,可以有更直观的感受。

image.png

  • B+树空间利用率更高、可减少I/O次数,磁盘读写代价更低(因为索引文件较大,一般不直接存储在内存中,一般是以索引文件的形式存储在磁盘上,这样,索引的查找就存在磁盘I/O ,B+树的内部节点没有指向具体信息的指针,只是作为索引使用,其内部节点比B树要小,快能够容纳的结点关键数量更多,一次性读入内存中的关键字也更多,相对的I/O次数也减少了,而I/O读写次数是影响索引检索效率的最大因素)

  • B+树的查询效率更加稳定。B树搜索可能会在非叶子结点结束,越靠近根节点记录查询时间越短,只要找到关键字即可确定记录的存在,其性能相当于在关键字全集内做一次二分查找。而B+树任何关键字的查询都必须从根节点到叶子结点,所有的关键字的查询路径长度一样,导致每一个关键字的查询效率相当。

  • B+树的叶子节点使用指针顺序连接在一起,只要遍历叶子节点就可以实现整棵树的遍历,而且在数据库中基于范围的查询是非常频繁的,而B树不支持这样的操作。

  • 增删文件(节点)时,效率更高。因为B+树的叶子节点包含所有关键字,并以有序的链表结构存储,这样可很好提高增删效率

  • B树只适合随机检索,而B+树同时支持随机检索和顺序检索。

 

额外科普-创建索引的方式

1、在创建表的时候创建

create table xx(

    key keyname(列名12)

    FULLTEXT KEY(列名)

    UNIQUE KEY(列名)

)

2、使用alter table 添加(可以添加普通、唯一、主键索引)

alter table 表名 add index indexname(字段名)

3、使用create index命令创建普通索引和唯一索引,不能创建主键索引

create index indexname on 表名 (字段名)

写在最后

  经验就是一个积累的过程,没有谁能够一步登天,所以脚踏实地才是成功的秘诀。

  如果文章对你有帮助,欢迎给我点赞、关注。如有疑问,欢迎添加博主进行交流。