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

相关推荐
倔强的石头_1 天前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
jiayou642 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
于眠牧北2 天前
MySQL的锁类型,表锁,行锁,MVCC中所使用的临键锁
mysql
李广坤3 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
Turnip12024 天前
深度解析:为什么简单的数据库"写操作"会在 MySQL 中卡住?
后端·mysql
爱可生开源社区4 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1774 天前
《从零搭建NestJS项目》
数据库·typescript
加号35 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏5 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐5 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端