
“你知道为什么索引能加速 SQL 吗?” 面试时听到这句话,别再只说“像目录一样”,这篇文章带你深入到底层,让你彻底掌握索引的概念和它背后的数据结构秘密。
索引(Index)是数据库中为了加快数据检索而构建的一种数据结构。
👉 简单理解:
就像你读一本字典,通过首字母查找页码,能瞬间跳到目标,而不是从头翻到尾。
不加索引时:
SELECT * FROM users WHERE email = 'abc@example.com';数据库只能进行全表扫描,一条条检查,时间复杂度为 O(n)。
加了索引后,查找时间可以降低为 O(log n),甚至接近 O(1),速度量级飞跃。
特点:
查询过程示意图:
[50]
/ \
[20] [70]
/ \ / \
[10][30] [60][80]查找 60:从根节点开始,逐层下降 → O(log n)
🧠 为什么是 B+ 树而不是红黑树?
适合等值查找:
SELECT * FROM users WHERE id = 123;⚠️ 不适合:
BETWEEN、> 无法命中MySQL InnoDB 默认不用哈希索引,而是有 自适应哈希缓存(Adaptive Hash Index)机制:
热点查询自动提取哈希加速。
用于维度离散且取值少的字段(如性别、是否启用等):
📌 这就是“回表查询”的来源。
Q1:聚簇索引和非聚簇索引区别?
答:聚簇索引是数据和索引在同一棵树中(InnoDB主键),非聚簇索引只存索引键 + 主键指针。
Q2:为什么 InnoDB 使用 B+ 树?
答:B+ 树查询更快、I/O 更少、支持范围查询,是最适合磁盘存储的结构。
Q3:索引一定会加速查询吗?
答:不一定,写入会变慢;查询字段类型/顺序不当时索引可能失效。
类型 | 结构 | 场景 |
|---|---|---|
B+树 | 多路平衡树 | 范围、排序、前缀 |
哈希 | 哈希表 | 精确查找 |
位图 | 位向量 | 维度小的字段 |
“索引是数据库的加速器,而 B+ 树是它的发动机。”


原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。