← 每日面试题 学习看板

你是如何进行SQL调优的?

面试题/01实践场景题/实践场景题目/数据库与存储/你是如何进行SQL调优的?.md

面试记录 2026-10-21

题目:你是如何进行SQL调优的?

难度:medium

标签:mysql/tuning

评分:⭐⭐⭐☆☆(3/5)

我的回答

我进行 SQL 优化主要看业务情况。一方面根据实际业务确认要返回的结果,尽量不用 * 返回全部列,因为有时只返回很少内容,可以通过覆盖索引;给业务查询字段创建索引,给排序字段创建索引;根据业务情况构建索引,尽可能合并成联合索引;同时控制索引数量,防止过多索引导致写入缓慢和存储压力。

点评

优点:少查列→覆盖索引、过滤/排序建索引、合并联合索引、控制索引数量,四个点都对。

不足:缺方法论主线——定位、分析、改写、结构、验证;排序字段应作为联合索引最后一段,而不是单独建。

补充:用「优化前后 rows_examined / RT」量化;深分页改游标;子查询转 JOIN;OR 转 UNION。

完整讲解

第一部分:知识重点剖析

SQL 调优是闭环而不是技巧集合:定位(慢日志、performance_schema)→ 分析(EXPLAIN 的 type/rows/Extra)→ 改写(去函数、去前导百分号、深分页改游标、子查询转 JOIN)→ 结构(字段类型、冗余、分表、归档)→ 验证(压测 + 回归 + 前后指标对比)。

第二部分:考察方向与延伸递进

  1. 深分页为什么慢?——limit 1000000,10 要扫描并丢弃前 100 万行,改游标或延迟关联。
  2. 排序字段怎么建索引?——放进联合索引末尾,让过滤 + 排序一次完成。
  3. 调优后怎么证明有效?——对比执行计划与 rows_examined、P99 RT、DB CPU。

第三部分:面试者参考回答

【一句话结论】 SQL 调优是按「定位、分析、改写、结构、验证」走闭环,不是堆索引。

【三点展开】 第一,先用慢日志和 EXPLAIN 定位是哪条 SQL、慢在扫描还是排序。第二,改写优先:少查列走覆盖索引,去掉列上函数和隐式转换,深分页改游标。第三,索引层面把等值列和排序列合进联合索引,同时控制数量避免写放大。

【一句边界】 当单表数据量和 QPS 都到瓶颈,SQL 层优化收益有限,要往上走到缓存、读写分离或分片。