MySQL 之索引为什么选择B+树

说到索引,我们首先得知道索引是什么?MySQL中的索引是一种数据库技术,用于提高数据库表中的数据检索速度。索引类似于书籍的目录,可以快速定位到数据的位置,而不需要扫描整个表。索引可以极大地加速数据的检索速度,尤其是在大型数据库表中。

那我们再来谈谈,索引是通过什么结构怎么实现的。我们能想到一下几种搜索效率较快的结构:二叉搜索树,哈希表,红黑树、N叉树。那接下来说说为什么这些结构都不太适合索引使用。1.哈希表:哈希表搜索的时间复杂度是 O(1),查询速度也快,但是哈希表通过哈希函数将键映射到存储位置,但该过程不保证数据的物理存储顺序与键的逻辑顺序一致。范围查询需要按顺序访问键值,而哈希表的无序性导致无法高效遍历连续键值。所以哈希表并不支持范围查找。2.二叉搜索树:二叉树的中序遍历是一个有序数组,但在极端条件下,就退化成了队列,失去了优势。3.红黑树:虽然是平衡或近似平衡的,但是毕竟是二叉结构,在检索数据时,由于表中的数据都是存在磁盘中的,所以每次范围某个节点的子节点时都会发生一次磁盘IO(磁盘I/O(Input/Output)指计算机系统中磁盘的输入输出操作,包括从磁盘读取数据(输出)和向磁盘写入数据(输入),是数据存储与传输的核心过程,直接影响系统性能)。4.N叉树:N叉树解决了树高的问题,意味着在相同数据量的情况下可以减少 IO 的次数,从而提高效率。但是不是最佳的结构。

此时,我们来介绍B+树:

通过以上图示可知,3个数据可以分成3个区间,[5,28), [28,65), [65,+∞)这三个区间,以此规律继续分下去。B+ 树的特点:1.能够保持数据稳定有序,插入与修改有较稳定的时间复杂度 2.非叶子节点作为索引层,用于指导数据查找方向,每个节点包含多个索引键(通常为有序链表结构),每个索引键对应一个子节点,非叶子节点仅仅具有索引作用,不存储数据。所有叶子节点存储的是主键KEY或者具体数据。3.所有叶子节点构成一个有序链表。

相关推荐
一 乐15 小时前
婚纱摄影网站|基于ssm + vue婚纱摄影网站系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端
1.14(java)16 小时前
SQL数据库操作:从CRUD到高级查询
数据库
Full Stack Developme17 小时前
数据库索引的原理及类型和应用场景
数据库
IDC02_FEIYA18 小时前
SQL Server 2025数据库安装图文教程(附SQL Server2025数据库下载安装包)
数据库·windows
辞砚技术录19 小时前
MySQL面试题——联合索引
数据库·面试
萧曵 丶19 小时前
MySQL 主键不推荐使用 UUID 的深层原因
数据库·mysql·索引
小北方城市网19 小时前
分布式锁实战指南:从选型到落地,避开 90% 的坑
java·数据库·redis·分布式·python·缓存
毕设十刻19 小时前
基于Vue的人事管理系统67zzz(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
TDengine (老段)21 小时前
TDengine Python 连接器入门指南
大数据·数据库·python·物联网·时序数据库·tdengine·涛思数据
萧曵 丶21 小时前
事务ACID特性详解
数据库·事务·acid