4.B树和B+树的区别?为什么MySQL选择B+树作为索引?

区别:

1.数据存储位置

B树每个节点都存储了索引和数据

B+树只有叶子节点存储数据,非叶子节点仅存储索引

2.叶子节点的链接

B+树的所有叶子节点通过指针连接成一个双向链表,可以高效地进行范围查询或者顺序遍历

B树则没有这样的连接关系,查询时需要通过递归访问,并且范围查询更复杂

3.插入和删除操作

B树需要考虑非叶子节点和叶子节点的分裂和合并

B+树由于非叶子节点不存储数据,仅起到索引的作用,插入和删除操作对内部节点影响较小

4.适用场景

B树适用于操作频繁的场景,因为它能在每个节点存储数据,操作可以直接在各个节点进行,相应速度较快

B+树适用于大量范围查询、顺序访问和高效存储的场景

为什么MySQL选择B+树作为索引?

B+树的所有值都存储在叶子节点,内部节点仅仅作为索引使用,可以高效地进行范围查询和顺序查询

B+树是平衡树,所有叶子节点都在同一层级,无论查询哪个数据,查找路径的长度都是相同的,时间复杂度O(log N),插入、删除也是如此

B+树的节点具有高度的扇出性,每个节点包含多个子节点,这使得它的高度保持的非常低,每次读入一个节点可以包含更多信息,减少磁盘I/O次数,提升效率

B+树不仅适用于单一列的索引,也可以用于复合索引

我目前还在学习阶段,文章中可能有错误和不足,欢迎大家斧正!

相关推荐
进击的明明9 小时前
当AI开始“边想边干”:深入聊聊ReAct,以及如何用Python手搓一个简单Agent
python·面试·agent
这个DBA有点耶9 小时前
从症状到根因:数据库监控指标的分层方法与静态/动态阈值策略
数据库·mysql·代码规范
SelectDB10 小时前
时间旅行与快照能力速查:Doris 侧三条落地路径
大数据·数据库·数据分析
SelectDB10 小时前
云数仓成本结构拆解速查:五层计费 vs Doris / 托管形态
大数据·数据库·数据分析
SelectDB10 小时前
什么场景能承接与建议保留:Doris vs Snowflake 边界速查
大数据·数据库·数据分析
ProcessOn11 小时前
纯干货!MySql实战02:一条SQL更新语句执行流程大探索!
sql·mysql·sql server
这个DBA有点耶12 小时前
DELETE没删多少数据,表却越来越大——InnoDB删除空洞与页合并失效的根因
数据库·mysql·代码规范
ly768915 小时前
PostgreSQL 备份恢复策略:pg_basebackup、WAL 归档与 PITR 在企业 Java 系统中的落地
java·数据库·postgresql·pitr·pg_basebackup·wal 归档
桃桃乌龙_16 小时前
LangGraph 深度解析:从链到图,把 Agent 的循环画出来
面试