返回
MySQL 索引原理与优化
百科(权威知识源 · 考试范围)
作者:管理员最后更新:2026/9/4 12:41:08审核:管理员

MySQL 索引原理与优化

索引是加速数据查询的数据结构。InnoDB 使用 B+ 树作为索引。

B+ 树索引

B+ 树的特点:

  • 非叶子节点只存,叶子节点存数据,且叶子节点用双向链表串联。
  • 矮胖、多路(3 层可存千万级数据),减少磁盘 IO。
  • 叶子链式串联,天然支持范围查询与有序扫描。

索引类型

  • 主键索引(聚簇索引):叶子节点存整行数据,数据即索引。
  • 二级索引:叶子节点只存主键值,查询需回表到聚簇索引取整行。
  • 联合索引:按多个列建立,遵循最左前缀原则
  • 唯一索引 / 全文索引:唯一约束 / 全文检索。

最左前缀原则

联合索引 (a, b, c) 中,查询条件需从最左列开始连续匹配才能用上索引:

-- 能用到 (a,b,c) 索引
WHERE a = 1 AND b = 2
-- 用不到(跳过了 a)
WHERE b = 2 AND c = 3

范围条件(>、<、between)之后的列索引失效。

索引失效场景

  • 对索引列做函数或运算WHERE DATE(create_time) = '2024'
  • 隐式类型转换WHERE id = '123'(字符串 vs int)。
  • LIKE '%xx' 前置通配符(无法用索引,全表扫)。
  • NOT INOR 连接非索引列。

覆盖索引 与 回表

当查询的列都在索引中时,无需回表,称为覆盖索引

-- 从二级索引即可拿到 name,无需回表
SELECT name FROM t WHERE name = 'a';  -- 若 name 是索引

优化建议

  • 为高频查询列建合适索引。
  • 选择区分度高(离散度大)的列做索引。
  • EXPLAIN 分析执行计划(type、key、rows、Extra)。
  • 控制索引数量(索引多会导致写入变慢、占空间)。
  • 避免在索引列上做函数/运算,避免前置通配符。

总结

  • B+ 树支持高效查询与范围扫描,是 InnoDB 索引基础。
  • 联合索引最左前缀;二级索引回表;覆盖索引免回表。
  • 用 EXPLAIN 检查,避免索引失效。
考试信息
通过标准满分(错一道即与满分无缘,可把整卷答完看解析;重考不限次数)
时间限制不限时
单卷抽题数10 题
成绩窗口2026-09-14 ~ 2026-09-20
积分学费10 积分
支付方式满分后用积分支付(自主决定)
用积分支付:成绩长期保留,参与排名,积分学费含平台资助池;不支付:成绩保留至窗口截止后清空
积分无充值通道;积分不足 10 时,平台自动发放 100 积分。积分不可提现、不可转让、无现金价值。
排行榜(窗口期最短满分用时 · 前 0 名)
当前窗口(2026-09-14 ~ 2026-09-20)

该窗口暂无满分记录

课程(免费学习 · 共 0 门)

暂无课程

登录后可查看我的出题、测试记录并参加满分考试