MYSQL:B树和B+树存储索引比较

MySQL使用B+树而不使用B树的主要原因是B+树在范围查询方面具有更好的性能。

B树是一种平衡多路搜索树,它的节点既可以存储数据,也可以存储索引。B树的节点一般包含多个关键字和对应的指针,这样可以减少磁盘I/O的次数。

而B+树是B树的一种变种,它与B树的主要区别在于:B+树的非叶子节点只存储索引,而数据都存储在叶子节点中,并且叶子节点之间通过指针进行连接。这种设计使得B+树具有以下优势:

  1. 更大的数据块访问能力:由于B+树的叶子节点只存储数据,数据是顺序存放的,并且通过链表进行连接,这样在范围查询时可以更快地获取到连续的数据块,从而减少磁盘I/O的次数。

  2. 更高的磁盘利用率:由于数据只存储在叶子节点中,非叶子节点只存储索引,这样可以减少非叶子节点所占用的空间,提高了磁盘的利用率。

  3. 更少的节点访问次数:由于数据只存储在叶子节点中,而非叶子节点只存储索引,查询时只需要在叶子节点上进行查找,而非叶子节点的查找只是为了定位到叶子节点,这样可以减少节点的访问次数,提高查询效率。

综上所述,MySQL使用B+树而不使用B树是为了在范围查询方面具有更好的性能,通过减少磁盘I/O次数、提高磁盘利用率和减少节点访问次数等方式来提高查询效率。

相关推荐
2301_814809861 分钟前
如何用 cookie 的 HttpOnly 与 Secure 属性防范 XSS 攻击
jvm·数据库·python
m0_515098424 分钟前
如何用 Object.keys 与 getOwnPropertyNames 遍历键名
jvm·数据库·python
还是阿落呀5 分钟前
第三章 添加数据
数据库·mysql
qq_1898070313 分钟前
golang如何实现日志按级别过滤_golang日志按级别过滤实现教程
jvm·数据库·python
abc123456sdggfd13 分钟前
Golang map底层实现原理_Golang map哈希表原理教程【经典】
jvm·数据库·python
roman_日积跬步-终至千里14 分钟前
【案例题-知识点(2)】架构风格上(五大类详解)
数据库·架构·系统架构
justjinji21 分钟前
JavaScript中利用宏任务拆分阻塞任务的实操案例
jvm·数据库·python
@小柯555m21 分钟前
MySql(基础操作符--查找除复旦大学的用户信息)
数据库·sql·mysql
weixin_4087177723 分钟前
c++如何实现跨平台的文件读写进度监听器回调机制【实战】
jvm·数据库·python
瀚高PG实验室29 分钟前
PostgreSQL 的 CREATE STATISTICS 未检查 schema 的 CREATE 权限 HGVE-2025-E010
数据库·postgresql·瀚高数据库