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.所有叶子节点构成一个有序链表。

相关推荐
~我爱敲代码~8 小时前
使用XSHELL远程操作数据库
数据库·adb
一般社员8 小时前
Windows导入大型sql文件到mysql
windows·sql·mysql
。puppy10 小时前
MySQL 库表操作全解析:从登录到权限管理的实战指南
mysql
春风霓裳14 小时前
sql-窗口函数
大数据·数据库·sql
言之。14 小时前
【数据库】TiDB 技术选型与架构分析报告
数据库·架构·tidb
人工智能训练14 小时前
如何在 Ubuntu 22.04 中安装 Docker 引擎和 Linux 版 Docker Desktop 桌面软件
linux·运维·服务器·数据库·ubuntu·docker·ai编程
胖头鱼的鱼缸(尹海文)14 小时前
数据库管理-第386期 使用OCP部署OceanBase 4.4.1社区版集群(20251107)
数据库·oceanbase
Craaaayon14 小时前
如何选择两种缓存更新策略(写缓存+异步写库;写数据库+异步更新缓存)
java·数据库·redis·后端·缓存·mybatis
一 乐15 小时前
点餐|智能点餐系统|基于java+ Springboot的动端的点餐系统小程序(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·小程序·论文
WarriorTan15 小时前
理解PostgreSQL中的数据块
数据库·postgresql