MySQL 8.4 LTS 性能调优:索引优化策略
作为一名在深夜被长事务告警惊醒无数次的DBA,笔者深知一条没有索引的SELECT语句能让生产环境CPU飙升到100%,还可能让SQL从几秒变成几小时跑不完。MySQL的索引策略早已从简单的单列索引进化为多维度的性能工程。今天咱们就聊聊如何用索引让查询速度提升百倍。
01. 索引基础与最左前缀原则
索引是MySQL查询优化的核心武器,但设计不当的复合索引可能比没有索引更慢。MySQL 中的最左前缀原则的案例很多。
场景:查询涉及album_id、privacy、rating等多个过滤条件,还有GROUP BY和ORDER BY操作。
1 | -- 表结构 |
那么针对下面这条查询语句如何优化。
1 | SELECT title, created_at, updated_at |
依据最左前缀原则:复合索引(album_id, privacy, rating)只有在查询条件中包含最左侧列album_id时才能生效。如果WHERE子句只包含privacy和rating,该索引将部分失效或完全失效。
需要创建索引:
1 | ALTER TABLE photos ADD INDEX IX_album_privacy_rating |
此外,MySQL 8.0开始,索引可以包含函数表达式(Functional Indexes),这在处理JSON字段或函数过滤时特别有用。
02. 索引覆盖与避免回表
索引覆盖(Covering Index)是性能优化的黄金法则。当查询的所有列都在索引中时,MySQL无需回表查询数据行。
场景:覆盖索引设计
1 | -- 表结构 |
如果查询非常频繁,可以考虑将这些列加入索引形成覆盖索引,彻底消除回表操作,达到“优”级性能。
1 | CREATE INDEX IX_loc_mapping ON locations(loc_mapping) USING HASH; |
覆盖索引 vs 非覆盖索引对比:
| 类型 | 查询列位置 | I/O操作 | 性能等级 |
|---|---|---|---|
| 覆盖索引 (Covering Index) | 全部在索引内 | 仅索引扫描 (Index Only Scan) | 优 (Fastest) |
| 普通索引 (Secondary Index) | 部分在索引内 | 索引 + 回表 (Index Lookups + RID) | 良 (Good) |
| 全表扫描 (Full Table Scan) | 无索引可用 | 扫描全表 (Sequential Scan) | 差 (Slow) |
03. 索引失效场景与执行计划验证
了解什么情况下索引会失效比知道如何使用索引更重要。
场景:索引特性与限制
1 | -- 场景1:二级索引访问 |
场景:索引验证
1 | -- 准备测试表 |
预期输出,使用索引,估算行数 rows 显著小于全表行数。
1 | mysql> EXPLAIN |
隐式类型转换陷阱:
1 | -- 索引失效:字符串列与数字比较 |
04. 索引提示与优化器干预
当优化器选择了错误的执行计划时,可以使用索引 USE INDEX 提示强制指定索引。
1 | -- 表结构:photos表有多个索引 |
索引提示类型对比:
| 提示类型 | 语法 | 作用 | 适用场景 |
|---|---|---|---|
| USE INDEX | USE INDEX(idx) | 建议优化器使用,但允许忽略 | 数据分布变化大的表 |
| FORCE INDEX | FORCE INDEX(idx) | 强制使用指定索引(除非没法用) | 明确知道索引更优时 |
| IGNORE INDEX | IGNORE INDEX(idx) | 排除特定索引 | 避免使用低效索引 |
05. 函数索引与JSON索引
MySQL 8.4 中可以使用函数索引。
1 | -- 为大写查询创建函数索引(避免全表扫描) |
JSON字段索引(MySQL 8.0+):
1 | -- 虚拟列+索引 |
MySQL 9.0 引入了 JSON Duality Views 新特性,也可以使用虚拟列索引,这个我们后面再做介绍。
06. 索引维护与性能监控
索引不是创建后就一劳永逸,需要定期维护和监控。
索引统计信息更新:
1 | -- 更新表统计信息(优化器依赖) |
索引碎片整理:
1 | -- 查看索引大小和碎片率(大表维护需要关注) |
好了,本期内容就先到这里。
Have a nice day ~ ☕
🌻 近期内容 ▼
- Oracle Skills开源:AI工程正在进入"技能时代"
- 苦等三年!Oracle AI Database 26ai本地服务器版终于来了
- MySQL 8.0结束生命周期,8.4.9 LTS、9.7.0发版上线:一个时代的交接与新生
👉 这里有得聊
如果对国产基础软件(操作系统、数据库、中间件)、AI、Vibe Coding、OpenClaw 、Hermes Agent 等感兴趣,可以加群一起聊聊。关注微信公众号:(少安事务所),后台回复[群],即可看到入口。如果这篇文章为你带来了灵感或启发,请帮忙『点赞、推荐、转发』吧,感谢!ღ( ´・ᴗ・` )~
Author: Shawn Yan
Link: https://shawnyan.cn/2026/mysql/mysql-8-4-lts-index-optimization/index.html
License: All articles on this site are original unless otherwise stated. Please indicate the source when reprinting!