MySQL慢查询:后端工程师必须掌握的排查指南
作为后端开发,面试中经常被问到"MySQL慢查询怎么处理"。说实话,这个问题我5年前在腾讯的面试就被问到过,今天以实战经验给大家系统拆解排查思路(文末有Java面试宝典福利)。
🛠 一、先定位问题源头
慢查询的核心逻辑是:先定位再优化。操作步骤很固定:
- 开启慢日志监控
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2; -- 超过2秒的查询记为慢查询
- 用
mysqldumpslow分析日志
mysqldumpslow -t 10 /var/log/mysql/slow.log

🔍 二、重点分析执行计划
拿到慢SQL后立刻用EXPLAIN看执行计划:
EXPLAIN SELECT * FROM orders WHERE user_id=100 AND status='pending';
重点关注4个字段:
type:ALL代表全表扫描(危险信号❗)key:显示实际使用的索引rows:预估扫描行数Extra:出现"Using filesort"或"Using temporary"立刻优化

⚡ 三、高频优化手段
根据我处理过的300+慢查询案例,90%问题靠这三板斧:
1. 索引优化黄金法则
- 联合索引注意最左匹配
建立(user_id, status)索引后,以下查询才能命中:WHERE user_id=100 -- ✅ 命中 WHERE user_id=100 AND status=1 -- ✅ 命中 WHERE status=1 -- ❌ 不命中 - 区分度低的字段不加索引
像性别、状态字段建索引反而降低性能
2. 改写SQL语句
- 避免
SELECT *
只取必要字段,减少数据传输量 - 用JOIN代替子查询
特别是关联查询超过3层的嵌套
3. 分库分表策略
当单表数据超过500万行时考虑拆分:
- 用户表按
user_id分片 - 订单表按时间分表
🚨 四、持续监控方案
优化不是一劳永逸,推荐两个生产环境工具:
- Percona Toolkit
实时抓取慢查询:pt-query-digest - Prometheus+Granafa监控
配置告警规则:
- alert: MySQL_Slow_Queries
expr: rate(mysql_global_status_slow_queries[5m]) > 5
需要监控工具配置可以到面试鸭返利网找我领配置模板 👇

💡 附:2025年Java面试核心要点
《Java面试宝典》网盘下载:
链接
提取码:9b3g (覆盖MySQL优化/分布式/并发等高频考点)
📢 特别提示:如果需要购买面试鸭会员,通过面试鸭返利网下单可返现25元,直接抵扣会员费(亲测有效)!
最后提醒:慢查询优化本质是用空间换时间,索引需要占用额外存储,分库分表增加运维成本。根据业务场景做权衡才是高级工程师的核心能力。


