SQL慢查询排查需遵循“先定位、再分析、后验证”流程:第一步开启并解读慢日志,关注Query_time、Rows_examined等字段;第二步用真实参数还原SQL并EXPLAIN;第三步识别索引失效场景;第四步针对性优化索引与查询。

SQL慢查询排查不是靠猜,核心是“先定位、再分析、后验证”。重点不在一上来改SQL或加索引,而在于拿到真实执行场景下的证据——尤其是慢日志里的实际参数和执行耗时。
没日志,一切分析都是空中楼阁。必须先确认慢查询日志已开启,并设合理阈值:
slow_query_log=1 和 long_query_time=0.5(注意:0.5秒是实际可设最小粒度,MySQL会记录 >0.5s 的查询)log_queries_not_using_indexes=1,捕获那些明明有索引却没走的“隐性慢SQL”很多同学直接拿开发环境写的SQL去explain,结果线上跑得巨慢。原因很简单:参数不同,执行计划可能完全不同。
WHERE条件中的占位符替换成日志里记录的真实值(比如user_id=123456)EXPLAIN FORMAT=JSON SELECT ...,重点关注:ALL(全表扫描)Rows_sent(大量无效扫描)有索引≠走索引。常见失效场景要一眼识别:
name LIKE '%abc' → 索引失效;改成name LIKE 'abc%'才可能走WHERE YEAR(create_time) = 2024 → 改成create_time BETWEEN '2024-01-01' AND '2024-12-31'
WHERE mobile = 13812345678(mobile是varchar)→ 字符串字段别用数字比较(a,b,c),但查询只用了b = ?或c = ? → 不会命中加索引不是万能解药,要结合查询模式来设计:
WHERE status=1 ORDER BY created_at DESC LIMIT 20 → 考虑联合索引(status, created_at)
SELECT id, title, author FROM article WHERE type=2 → 索引建为(type, id, title, author)
LIMIT 10000,20?改写为基于游标的查询:WHERE id > 123456 ORDER BY id LIMIT 20
基本上就这些。排查链路清晰了,慢SQL就不再玄学。关键是养成“日志先行、参数还原、explain验证”的习惯,而不是凭经验瞎调。
以上就是SQL慢查询怎么排查_核心原理解析助你掌握关键方法【教学】的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号