Mysql底层数据结构为什么选择B+树

索引底层采用什么数据结构,为什么使用B+树而不是其他数据结构:

(1)如果采用二叉树:使用递增字段作为索引时,二叉树会退化成链表,查找效率太低

(2)如果采用红黑树,虽然插入新元素的过程中会自我平衡,调整位置,但是红叉树终究还是二叉树,树的高度还是太高了,I/O操作太多,多路树B树和B+树具有更低的层高。

(3)如果采用哈希表:单次查询虽然哈希表确实快,但是范围查询,比如:select * from table1 where id

(4)

1.B树的非叶子节点和叶子节点之间没有重复,B+树的非叶子节点和叶子节点之间有重复,也就是B+树有冗余节点

2.B树的非叶子节点和叶子节点都既存储索引key,又存储数据data,B+树的非叶子节点只存储索引,不存储数据,叶子节点才是既存储索引,又存储数据

3.B树的叶子节点不会存储相邻节点在磁盘中的位置,B+树的叶子节点会存储相邻节点在磁盘中的位置,所以B+树支持范围查询

4.B树不用查到叶子节点就可能查到数据,B+树必须一路查到叶子节点才能查到数据

相关推荐
小碗羊肉37 分钟前
【MySQL | 第五篇】事务
数据库·mysql
@小柯555m42 分钟前
MySql(高级操作符--高级操作符练习(1))
数据库·sql·mysql
bqq198610261 小时前
MySQL分库分表
数据结构·mysql
一直会游泳的小猫1 小时前
Claude Code 连 MySQL:保姆级教程
mysql·mcp·claude code
HalvmånEver1 小时前
MySQL的内置函数
linux·数据库·学习·mysql
小松加哲2 小时前
服务器LVM磁盘内部空闲空间无损扩容+挂载原理+MySQL Binlog自动清理完整实操
运维·mysql·服务器扩容
IT界的老黄牛2 小时前
MySQL 磁盘告警 1.2TB:从衣柜原理到 gh-ost 卧底,一次释放 540GB 的实战复盘
运维·数据库·mysql
deviant-ART2 小时前
MySQL 实战:如何根据 ID 将表 B 的字段更新到表 A
数据库·mysql
qq_283720052 小时前
高并发场景下 Python+MySQL 性能优化最佳实践
python·mysql·性能优化
@小柯555m2 小时前
MySql(基础操作符--用where过滤空值练习)
数据库·sql·mysql