MySQL 是后端面试绕不开的主题。很多候选人准备时会背最左前缀、覆盖索引、回表、索引下推、事务隔离级别,但真正面试时,问题往往不是“你知道什么概念”,而是“你能不能把一个慢接口定位清楚”。
面试反馈里经常出现这样的追问:接口突然变慢你怎么查?执行计划(Explain,用来查看数据库打算怎样执行一条查询)里重点看什么?为什么加了索引还是没走?联合索引顺序怎么定?分页很深怎么办?事务为什么会锁住?这些问题背后都在考察一个能力:你是否能把数据库知识落到真实系统里。
慢查询回答要有顺序
如果被问“接口慢怎么排查”,不要一上来就说“加索引”。更稳的回答是先判断慢在哪里。
可以按这个顺序讲:先看接口耗时分布,确认是偶发慢还是稳定慢;再看链路追踪或日志,判断时间消耗在业务逻辑、外部服务、缓存还是数据库;如果定位到数据库,再看慢查询日志、执行频率、扫描行数、返回行数和执行计划。
这个顺序能体现你不是凭经验改 SQL,而是先定位瓶颈。
执行计划不要只会看访问类型
执行计划里的访问类型(type)很重要,但面试官更想听你能综合判断。可以重点看几个字段:
- 候选索引 `possible_keys` 和实际索引 `key`:这是执行计划里的字段,用来看数据库候选了哪些索引,最后实际用了哪个索引。
- rows:预估扫描行数是否过大。
- 附加信息 Extra:看是否出现额外排序、临时表、索引条件下推等信号。
- 过滤比例 filtered:看扫描出来的数据里最终能留下多少。
- 索引长度 key_len:辅助判断联合索引实际用到了几列。
回答时可以补一句:执行计划是优化器预估,不等于真实执行结果,必要时还要结合慢查询日志、数据分布和实际执行时间。
索引失效要讲原因,也要讲为什么
常见索引失效包括:对索引列使用函数、隐式类型转换、like 前置百分号、联合索引不满足最左前缀、范围查询后面的列利用不足、OR 条件不合理、数据区分度太低导致优化器不选索引。
但面试里只列这些还不够。更好的表达是解释背后的原因:索引本质上是按有序结构帮助快速定位。如果查询条件破坏了有序性,或者过滤效果太差,优化器就可能选择全表扫描。
例如 `where date(create_time)=...` 会让索引列参与函数计算,数据库没法直接利用原来的有序结构;更好的写法是转换成范围查询。
联合索引顺序怎么定
很多人背“最左前缀”,但面试官常会追问:那联合索引字段顺序怎么设计?
可以从查询模式讲,而不是死背规则。等值查询频繁、区分度高、过滤效果强的字段适合放前面;范围查询字段通常放在后面;排序字段能否复用索引也要考虑;如果某个查询只需要索引里的字段,可以考虑覆盖索引减少回表。
同时要主动讲成本:索引不是越多越好,写入、更新、磁盘空间、缓存命中都会受影响。这个取舍很重要,能让回答更像真实项目。
深分页不要只说 limit 优化
深分页问题常见于列表页、后台管理、订单查询。低分回答通常是“加索引”或“用 limit”。但 `limit 100000,20` 的问题在于数据库需要跳过大量记录。
更好的回答可以分场景:如果是按时间或 ID 递增浏览,可以用游标翻页,比如 `where id > last_id limit 20`;如果必须跳页,可以先用覆盖索引查出主键,再回表取详情;如果是后台复杂筛选,要限制最大页数或改成导出任务;如果是搜索场景,可能需要引入搜索引擎。
这类回答体现的是产品需求和数据库成本之间的权衡。
一个项目化表达
如果简历里写了订单列表优化,可以这样讲:原接口按用户、状态、时间范围查询订单,数据量上来后列表页 99 分位响应时间升高,也就是最慢的那批用户明显变慢。排查时先通过日志确认耗时集中在订单查询,再看慢查询发现扫描行数过大。执行计划显示只用了用户 ID 索引,状态和时间过滤靠回表后筛选。后来根据主要查询模式调整联合索引顺序,并把深分页改成基于最后一条记录的游标翻页。上线后观察慢查询数量、接口 99 分位响应时间和数据库处理器负载,确认优化有效。
这个回答比“我加了索引”更完整,因为它有现象、定位、方案和验证。
面试前自查
- 一个接口慢,你怎么证明慢在数据库?
- 执行计划里你重点看哪些字段?
- 为什么某个查询没走索引?
- 联合索引字段顺序怎么设计?
- 深分页怎么处理,有什么代价?
- 事务锁问题怎么定位?
能把这些讲清楚,MySQL 就不再是孤立知识点,而是你的线上排查能力。
慢查询排查顺序表
MySQL 慢查询题最能暴露项目经验。不要一上来就说加索引,先确认慢在哪里、数据范围多大、执行计划怎么走、改动是否影响结果。
| 顺序 | 要看什么 | 常见发现 | 下一步 |
|---|---|---|---|
| 1 | 慢 SQL 和参数 | 某些条件特别慢 | 找出高频和最慢组合 |
| 2 | 数据量和过滤率 | 扫描行数过大 | 调整索引或条件 |
| 3 | 执行计划 | 没走合适索引或回表多 | 设计联合索引 |
| 4 | 业务口径 | 优化后结果是否一致 | 做对账和灰度 |
深分页、模糊查询、排序字段、联合索引顺序都可以放进这个排查顺序里讲。重点是让面试官听出你是在定位问题,而不是背索引规则。