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

相关推荐
曦樂~5 小时前
【Qt】信号与槽(Signal and Slot)- 简易计算器
开发语言·数据库·qt
ZYMFZ5 小时前
python面向对象
前端·数据库·python
lansye6 小时前
MySQL K8S日志分析与数据还原
mysql·k8s
lang201509286 小时前
MySQL 8.0原子性DDL全面解析
数据库·mysql
viperrrrrrrrrr77 小时前
milvus向量数据库
数据库·大模型·llm·milvus
白衣鸽子7 小时前
MySql数据库同步技术:构建高可用架构的基石
数据库·后端
不良人天码星8 小时前
redis的事务,以及watch的原理
数据库·redis·缓存
韩立学长8 小时前
基于微信小程序的公益捐赠安全平台9hp4t247 包含完整开发套件(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·微信小程序·小程序
智能化咨询8 小时前
SQL之参数类型讲解——从基础类型到动态查询的核心逻辑
数据库·oracle