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+树必须一路查到叶子节点才能查到数据

相关推荐
在未来等你6 小时前
SQL进阶之旅 Day 21:临时表与内存表应用
sql·mysql·postgresql·database·temporary-table·memory-table·sql-optimization
小Tomkk8 小时前
阿里云 RDS mysql 5.7 怎么 添加白名单 并链接数据库
数据库·mysql·阿里云
寒山李白10 小时前
MySQL复杂SQL(多表联查/子查询)详细讲解
sql·mysql·子查询·多表联查
冰橙子id10 小时前
centos7编译安装LNMP架构
mysql·nginx·架构·centos·php
玛奇玛丶10 小时前
面试官:千万级订单表新增字段怎么弄?
后端·mysql
天天摸鱼的java工程师12 小时前
从被测试小姐姐追着怼到运维小哥点赞:我在项目管理系统的 MySQL 优化实战
java·后端·mysql
Clang's Blog12 小时前
一键搭建 WordPress + MySQL + phpMyAdmin 环境(支持 PHP 版本选择 & 自定义配置)
数据库·mysql·php·wordpr
异常君12 小时前
高并发数据写入场景下 MySQL 的性能瓶颈与替代方案
java·mysql·性能优化
RestCloud12 小时前
如何通过ETLCloud实现跨系统数据同步?
数据库·数据仓库·mysql·etl·数据处理·数据同步·集成平台
程序员岳焱13 小时前
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
后端·sql·mysql