前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >MySQL数据库为什么索引使用B+树而不是B树

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

作者头像
IT学习日记
发布于 2022-09-13 08:07:15
发布于 2022-09-13 08:07:15
68400
代码可运行
举报
文章被收录于专栏:IT知识进阶学习IT知识进阶学习
运行总次数:0
代码可运行

前言

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

详解

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

  • B+树空间利用率更高、可减少I/O次数,磁盘读写代价更低(因为索引文件较大,一般不直接存储在内存中,一般是以索引文件的形式存储在磁盘上,这样,索引的查找就存在磁盘I/O ,B+树的内部节点没有指向具体信息的指针,只是作为索引使用,其内部节点比B树要小,快能够容纳的结点关键数量更多,一次性读入内存中的关键字也更多,相对的I/O次数也减少了,而I/O读写次数是影响索引检索效率的最大因素)
  • B+树的查询效率更加稳定。B树搜索可能会在非叶子结点结束,越靠近根节点记录查询时间越短,只要找到关键字即可确定记录的存在,其性能相当于在关键字全集内做一次二分查找。而B+树任何关键字的查询都必须从根节点到叶子结点,所有的关键字的查询路径长度一样,导致每一个关键字的查询效率相当。
  • B+树的叶子节点使用指针顺序连接在一起,只要遍历叶子节点就可以实现整棵树的遍历,而且在数据库中基于范围的查询是非常频繁的,而B树不支持这样的操作。
  • 增删文件(节点)时,效率更高。因为B+树的叶子节点包含所有关键字,并以有序的链表结构存储,这样可很好提高增删效率
  • B树只适合随机检索,而B+树同时支持随机检索和顺序检索。

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

1、在创建表的时候创建

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create table xx(

    key keyname(列名12)

    FULLTEXT KEY(列名)

    UNIQUE KEY(列名)

)

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
alter table 表名 add index indexname(字段名)

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create index indexname on 表名 (字段名)

写在最后

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/06/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【MYSQL】 ——索引(B树B+树)、设计栈
阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!!
三三是该溜子
2024/12/30
1440
【MYSQL】 ——索引(B树B+树)、设计栈
MySQL为什么要使用B+树索引
搞懂这个问题之前,我们首先来看一下MySQL表的存储结构,再分别对比二叉树、多叉树、B树和B+树的区别就都懂了。
BUG弄潮儿
2021/02/03
5620
MySQL为什么要使用B+树索引
2020最新版MySQL数据库面试题(一)
结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询语言。
俊才
2020/04/13
1.1K0
Mysql数据库-索引
MySQL索引(index): 是帮助MySQL高效获取数据的数据结构,所以索引的本质就是数据结构!
Devops海洋的渔夫
2022/01/17
2.2K0
Mysql数据库-索引
MySQL索引底层实现原理(B树和B+树)
数据库索引是存储在磁盘上的,当数据量大时,就不能把整个索引全部加载到内存了,只能逐一加载每一个磁盘块(对应索引树的节点),索引树越低,越矮胖,磁盘IO次数就少
终有救赎
2023/10/31
2.2K0
MySQL索引底层实现原理(B树和B+树)
为什么MySQL InnoDB 存储引擎要用B+树做索引,而不用B树?
一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。这样的话,索引查找过程中就要产生磁盘I/O消耗。而因为B+树的内部节点只是作为索引使用,而不像B树那样每个节点都需要存储硬盘指针。也就是说:B+树中每个非叶节点没有指向某个关键字具体信息的指针,所以每一个节点可以存放更多的关键字数量,即一次性读入内存所需要查找的关键字也就越多,减少了I/O操作。
一个会写诗的程序员
2021/03/04
5.7K1
彻底搞懂MySQL的索引
MyISAM和InnoDB是MySQL最常用的两个存储引擎,本文将进行详尽的介绍和对比。对于MySQL其余几种存储引擎,请读者自行搜索学习。
全菜工程师小辉
2019/08/16
9010
数据库底层数据结构 B树B+树LSM树 详解对比与总结
我们熟知常用数据库MySQL MongoDB HBase等底层存储都用了各种树结构,如B树LSM树,不过为什么要用这些结构呢?
大鹅
2021/06/16
5.3K0
MySQL数据库知识点
结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询语言。
Vincent-yuan
2021/09/10
7870
MySQL数据库知识点
为什么MySQL数据库索引选择使用B+树?
我们在MySQL中的数据一般是放在磁盘中的,读取数据的时候肯定会有访问磁盘的操作,磁盘中有两个机械运动的部分,分别是盘片旋转和磁臂移动。盘片旋转就是我们市面上所提到的多少转每分钟,而磁盘移动则是在盘片旋转到指定位置以后,移动磁臂后开始进行数据的读写。那么这就存在一个定位到磁盘中的块的过程,而定位是磁盘的存取中花费时间比较大的一块,毕竟机械运动花费的时候要远远大于电子运动的时间。当大规模数据存储到磁盘中的时候,显然定位是一个非常花费时间的过程,但是我们可以通过B树进行优化,提高磁盘读取时定位的效率。
用户3467126
2019/08/05
1.5K0
为什么MySQL数据库索引选择使用B+树?
【愚公系列】2022年01月 Mysql数据库-MySQL索引
通常在B+Tree上有两个头指针,一个指向根节点,另一个指向关键字最小的叶子节点,而且所有叶子节点(即数据节点)之间是一种链式环结构。因此可以对B+Tree进行两种查找运算:
愚公搬代码
2022/01/28
3450
【愚公系列】2022年01月 Mysql数据库-MySQL索引
MYSQL数据库-索引
MYSQL数据库-索引 零、前言 一、索引概念 二、认识磁盘 三、理解索引 1、如何理解Page 2、B+ vs B 3、聚簇索引 VS 非聚簇索引 4、普通索引 5、总结 四、索引操作 1、创建索引 2、查询索引 3、删除索引 零、前言 本章主要讲解MYSQL数据库中的索引这一重要知识点 一、索引概念 索引的价值: 提高数据库的性能,索引是物美价廉的东西了:不用加内存,不用改程序,不用调sql,只要执行正确的create index ,查询速度就可能提高成百上千倍,但是查询速度的提高是以插入、更新
用户9645905
2022/12/11
2.1K0
MYSQL数据库-索引
MySQL数据库建表、优化、算法、分区分库分表总结
1、因为任何有业务含义的列都有改变的可能性,主键一旦带上了业务含义,那么主键就有可能发生变更。主键一旦发生变更,该数据在磁盘上的存储位置就会发生变更,有可能会引发页分裂,产生空间碎片。
chenchenchen
2019/09/06
5.3K0
数据库索引(结合B-树和B+树)
数据库索引,是数据库管理系统中一个排序的数据结构以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树。 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种
Mister24
2018/05/14
9350
MySQL索引B+树、执行计划explain、索引覆盖最左匹配、慢查询问题
在数据库中,为了提高查询效率和数据的持久化存储,在设计索引时通常会采用B树或B+树。本文将对B树和B+树进行详细介绍,并解释为什么MySQL选择B+树作为索引结构。
青山师
2023/05/05
4650
MySql进阶索引篇01——深度讲解索引的数据结构:B+树
索引是存储引擎中一种用于快速找到数据的存储结构,他就像《新华字典》的目录,可以使我们查每个字的速度大大提升。
半旧518
2022/10/26
2.3K0
MySql进阶索引篇01——深度讲解索引的数据结构:B+树
B-树和B+树的应用:数据搜索和数据库索引
定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树: ⑴树中每个结点至多有m 棵子树; ⑵若根结点不是叶子结点,则至少有两棵子树;
黄规速
2022/04/14
7130
B-树和B+树的应用:数据搜索和数据库索引
MySQL数据库索引选择为什么使用B+树而不是跳表?
在进一步分析为什么MySQL数据库索引选择使用B+树之前,我相信很多小伙伴对数据结构中的树还是有些许模糊的,因此我们由浅入深一步步探讨树的演进过程,在一步步引出B树以及为什么MySQL数据库索引选择使用B+树!
小冷coding
2023/05/24
7160
MySQL数据库索引选择为什么使用B+树而不是跳表?
mysql系列-索引
常见的数据结构中, 哈希表和二叉平衡树的查找效率分别是O(1)和O(logn), 是效率最快的两个, MySQL也毫不意外的使用了这两种数据结构来做索引。 MySQL索引的数据结构有两种选择, B+Tree 和 Hash。
用户6182664
2022/11/14
6690
为什么MySQL数据库索引选择使用B+树?
在进一步分析为什么MySQL数据库索引选择使用B+树之前,我相信很多小伙伴对数据结构中的树还是有些许模糊的,因此我们由浅入深一步步探讨树的演进过程,在一步步引出B树以及为什么MySQL数据库索引选择使用B+树!
Java后端技术
2018/08/09
1.7K0
为什么MySQL数据库索引选择使用B+树?
推荐阅读
相关推荐
【MYSQL】 ——索引(B树B+树)、设计栈
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文