首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
为什么 MySQL 采用 B+ 树作为索引?
[问答题]
为什么 MySQL 采用 B+ 树作为索引?
查看答案及解析
添加笔记
求解答(0)
邀请回答
收藏(6)
分享
纠错
6个回答
添加回答
3
虾粥
1)B+Tree是多路自平衡的树结构,通常结构是矮胖结构,契合磁盘的I/O操作,可以大大减少数据查询时磁盘的I/O操作。2)叶子节点中同时存储索引和数据,能避免数据查询的回表,较少磁盘的I/O次数。3)叶子节点直接用链表结构进行连接,在范围查询时,可以直接在叶子节点进行顺序查询,而不需要重新从根节点查询。
发表于 2025-06-20 15:33:07
回复(0)
1
赫敏大王
MySQL索引结构是指MySQL中用于提高查询效率的数据结构 常见的能快速搜索的数据结构有:哈希表、二叉排序树、平衡二叉树、红黑树、B树、B+树等 哈希表,用唯一的key查对应的value,时间复杂度O(1),不支持范围查询和排序 二叉排序树,支持范围查询和排序,顺序插入时退化为链表(链表查询时间复杂度O(n)) 平衡二叉树,通过旋转操作可避免退化为链表,插入删除时频繁的旋转会产生大量的磁盘I/O 红黑树,不追求决定的平衡,减少插入删除时的旋转次数减少c了磁盘I/O,红黑树节点大小固定,存储大量数据时,树高增长过快,查找性能下降(更适合存储少量数据) B树,是多路平衡排序树,无论是叶子节点还是非叶子节点,都会保存数据,树高不会过高 但B树节点既存数据又存索引,导致一个节点中存不了多少索引,要同样保存大量数据,树高增加,性能降低;同时B树进行范围查询时,需要回溯整个数据结构,效率低,会产生随机I/O。 所以B树也不行得上B+树 B+树,也是多路平衡排序树,非叶子节点只存索引,不存数据,树高更低,查询性能更好;B+树的数据只存于叶子节点,由双向链表连接,范围查询只需遍历链表,无需回溯整个数据结构性能更好 所以MySQL选用B+树保存索引
发表于 2025-07-07 23:52:05
回复(0)
0
牛客277503983号
B+树是一种多路搜索树,每个节点都可包含多个关键字和子节点,减少了树的高度,优化了查询效率。 所有关键字在树中按顺序排列,左子树的关键字小于父节点,右子树的关键字大于父节点,方便进行范围查询和排序操作。叶子节点通过双向链表连接,形成有序链表,方便遍历查询所有数据。非叶子节点只存储关键字和子节点指针,不存储实际数据,使得能够存储多个关键字,进一步减少了树的高度,优化了查寻效率。b+树的高度小所以I/o操作很少,并且b+树的大小与磁盘块的大小类似,可以进行批量读取,提高读取效率。B+树有平衡树的属性,无论如何插入删除数据都不会影响树的高度。非常稳定
发表于 2025-07-09 23:23:12
回复(0)
0
攻城牛
首先,b+树是一种多路的平衡排序树,每个节点可以存储大量的键值,这使得整个树的高度即使面对大量的数据也是很矮的,极大提高查询速度,其次,b+树的叶子节点层是双向链表链接的,节点内部是单向链表,适合范围查询。最后结合mysql,在mysql中,b+树的节点是读取的单位,也就是“页”,一个磁盘块。每个非叶子节点只存储键值,不存储数据,这使得每个节点可以保存大量数据的指针,也就是一次性读取的数据多,io次数少使得读取效率高。b+树的叶子节点存储的是主键索引和数据(如果是基于主键为键值),如果基于其他属性为键值,叶子节点存储的是主键索引。
发表于 2025-07-08 22:13:33
回复(0)
0
拥抱太阳Nuxra
MySQL 中 B + 树节点与磁盘页大小匹配,通过利用操作系统预读机制和减少随机 I/O,使单次 I/O 能加载完整节点,从而优化磁盘读写效率,IO 数量只和树的高度有关。 ---- 假设 B+ 树高度为 3,节点大小与页大小均为 16KB: 根节点:从磁盘读入内存(1 次 I/O)。 中间节点:根据根节点的索引,定位并读入对应中间节点(1 次 I/O)。 叶子节点:同理,读入叶子节点(1 次 I/O)。 数据访问:若为覆盖索引,直接从叶子节点获取数据;否则通过主键回表(可能需额外 I/O)。 总 I/O 次数 = 3 次,无论数据量多大,查询路径的 I/O 次数仅取决于树的高度。
发表于 2025-07-08 15:09:22
回复(0)
0
皋亮亭
mysql采用b+ 树索引,主要是因为b+树索引支持高效的范围查询,顺序访问和磁盘读写优化,b+树索引的叶子节点链表结构支持顺序访问,树的高度较低,减少了磁盘i/o的次数,并且有效的支持范围查询和顺序查询
发表于 2025-07-01 01:31:24
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
难度:
6条回答
6收藏
75浏览
热门推荐
相关试题
3.下列关于表中西部省市区2006...
资料分析
言语理解与表达
资料分析
评论
(1)
计算机在工作过程中,若突然停电,(...
计算机常识
普及
C++
Pascal
选择题
评论
(1)
来自
NOIP2008初赛普及组
Mysql中表student_in...
数据库
SQL
评论
(1)
MySQL中执行 SELECT I...
SQL
评论
(2)
下列表达式的值为True的是( )
Python
评论
(2)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题