news 2026/5/11 2:06:33

MySQL 索引原理系列(一):为什么一学数据库索引就懵?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL 索引原理系列(一):为什么一学数据库索引就懵?

很多人在学习 MySQL 索引时,都会经历一个非常痛苦的阶段:

刚开始学的时候:

  • 什么是索引?
  • 为什么会出现 B树、B+树?
  • 主键又是什么?
  • 聚簇索引、普通索引、回表又是什么?

感觉所有概念突然一起冲了出来。

最后的结果通常是:

每个词好像都听过,但整体完全串不起来。

而我最近在学习 MySQL 索引时,也正好经历了这个阶段。

后来我发现:

其实并不是索引难,而是大部分资料一开始就直接讲 B+树,导致新人根本不知道这些东西之间到底是什么关系。

所以这一篇文章,我不打算上来就讲八股。

而是从“数据库为什么需要索引”开始,一步步把:

索引 ↓ B树 ↓ B+树 ↓ 主键

这些概念真正串起来。


一、数据库最原始的问题:查数据太慢

假设现在有一张用户表:

user id name age 1 Tom 20 2 Jack 22 3 Lucy 19

现在执行一条 SQL:

SELECT * FROM user WHERE id = 2;

如果数据库没有任何“加速结构”,它会怎么做?

答案是:

一行一行找。

也就是:

id=1 ❌ id=2 ✔ id=3 ❌

这种方式叫:

全表扫描(Full Table Scan)

数据少的时候问题不大。

但如果是:

100万条 1000万条 甚至上亿条数据

那就会非常慢。


二、于是数据库需要“目录”

这个时候,人类会很自然想到一个东西:

目录。

就像一本书:

  • 没目录 → 一页页翻
  • 有目录 → 直接定位章节

数据库也是一样。

于是:索引(Index)出现了


三、索引到底是什么?

一句话理解:

索引 = 数据库提前整理好的一份“查找目录”

比如:

id 数据位置 1 第100行 2 第200行 3 第300行

数据库先查“目录”,再定位真正的数据。

所以:

索引的本质:

用空间换时间。


四、那索引怎么存储才最快?

这里就开始引出:

树结构

因为:

如果数据量很大:

1 2 3 4 5 ... 10000000

普通数组查找、插入、排序都会有问题。

于是数据库需要一种:

查询快 插入快 删除快 还能保持有序

的数据结构。

于是:B树 和 B+树出现了


五、B树(B-Tree)是什么?

B树的核心思想是:

每个节点都可以存数据。

结构类似:

[30] / \ [10] [50] / \ / \ [5] [20] [40] [60]

这里:

  • 30 是数据
  • 10 / 50 也是数据
  • 5 / 20 / 40 / 60 也是数据

也就是说:数据分散在树的各层。


B树的特点

1、每层都可能有数据

查找时:

可能中途就找到。


2、查询路径不固定

有时候查2层:

有时候查3层。


3、范围查询不方便

因为数据是分散的。


六、B+树是什么?

后来数据库发现:

B树虽然已经很强了,但仍然不够适合数据库。

于是出现了:

B+树(B+ Tree)


B+树最核心的变化:所有数据只放在叶子节点

上层节点:

只负责导航。


结构类似:

[30] / \ [10|20] [30|50] 叶子节点: 10 → 20 → 30 → 40 → 50 → 60

七、B+树最重要的三个特点


1、非叶子节点不存真实数据

它们只是:

目录 导航 路标

2、所有数据都在叶子节点

这样结构非常统一。


3、叶子节点之间形成链表

这是 B+树最关键的一点。

比如:

10 → 20 → 30 → 40 → 50

这样数据库做范围查询时:

SELECT * FROM user WHERE id BETWEEN 20 AND 50;

就会非常快。


八、B树 vs B+树(终于能看懂了)

对比B树B+树
数据位置各层都有只在叶子
非叶子节点存数据只存索引
查询路径不固定固定
范围查询一般非常强
叶子节点无链表链表结构
数据库使用主流

九、主键又是什么?

讲到这里,很多人又会开始懵:

主键怎么又出来了?

其实主键很简单。

一句话:

主键 = 每行数据的唯一身份证

比如:

id = 1001

这个 id:

不会重复。


数据库会使用:

主键 + B+树

来组织整个数据结构。

于是:

主键索引出现了。


十、终于把关系串起来了

到这里,我们终于可以把整个链路串起来:

数据太多 ↓ 全表扫描太慢 ↓ 需要索引(目录) ↓ 索引需要高效结构 ↓ 出现 B树 / B+树 ↓ 数据库最终选择 B+树 ↓ 主键作为唯一标识 ↓ MySQL 用 B+树组织主键

十一、这一篇你真正需要记住什么?

其实只需要记住下面三句话:


1、索引是“目录”

作用:

加速数据查找。


2、B+树是“索引的实现结构”

它不是业务概念。

而是:

数据结构。


3、主键是“唯一标识”

数据库使用:

主键 + B+树

来组织数据。


十二、结尾

很多时候:

我们不是学不会数据库索引。

而是:

一开始就被各种概念同时轰炸。

其实真正的学习顺序应该是:

为什么需要索引 ↓ 索引是什么 ↓ B+树是什么 ↓ 主键索引 ↓ 普通索引 ↓ 回表 ↓ 联合索引

只有这样,整个知识体系才会真正连起来。


下一篇预告

下一篇,我们正式进入:

《MySQL 索引原理系列(二):终于搞懂 B树 和 B+树》

会真正讲清:

  • 为什么树结构会出现
  • 为什么数据库不用红黑树
  • 为什么 MySQL 最终选择 B+树
  • B+树为什么特别适合磁盘 IO

这一篇开始,我们正式进入:

MySQL 索引底层原理。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 2:04:43

TCPA全局控制器设计与循环控制优化技术

1. TCPA架构与全局控制器概述紧密耦合处理器阵列(Tightly Coupled Processor Array, TCPA)是一种专为高性能并行计算设计的架构,特别适合处理规则的数据并行任务,如线性代数运算、信号处理和图像处理等。TCPA由大量处理单元&#…

作者头像 李华
网站建设 2026/5/11 2:01:34

使用Canvas与原生JS实现动态变色光标:从粒子系统到性能优化

1. 项目概述:打造一个会呼吸的动态光标你有没有觉得电脑屏幕上那个千篇一律的白色箭头或小手图标,看久了有点乏味?尤其是在做一些创意工作或者单纯想给日常的网页浏览增添一点乐趣时,一个能响应你操作、充满活力的光标&#xff0c…

作者头像 李华
网站建设 2026/5/11 1:58:33

芯片功耗验证:从约束随机到系统级场景化测试的演进

1. 项目概述:当功耗意图遇上约束随机验证在芯片设计领域,尤其是SoC(片上系统)级别,我们正面临一个日益尖锐的矛盾:一边是越来越复杂、必须从系统层面进行管理的功耗意图(Power Intent&#xff0…

作者头像 李华
网站建设 2026/5/11 1:52:13

暗黑2角色编辑器终极指南:5分钟打造完美角色,告别刷装烦恼

暗黑2角色编辑器终极指南:5分钟打造完美角色,告别刷装烦恼 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit 还在为暗黑破坏神2中错误的技能加点而烦恼吗?是否厌倦…

作者头像 李华
网站建设 2026/5/11 1:47:10

NativeTernary编码:二进制系统上的高效三元数据表示方案

1. NativeTernary编码方案概述在当今计算系统中,二进制数据表示占据着绝对主导地位。然而,当我们深入分析信息论基础时会发现,以自然对数e为底(约2.718)的数制才是信息编码的理论最优解。三进制(基数为3&am…

作者头像 李华