如何定位慢查询 一、慢查询发生场景聚合查询多表查询表数据量过大查询深度分页查询表象页面加载过慢、接口压测响应时间过长超过 1s实际中 500ms 以上就值得关注。二、如何定位1. 开启慢查询日志 —— 找到慢 SQL-- 查看是否开启 SHOW VARIABLES LIKE slow_query_log; -- 开启慢查询日志 SET GLOBAL slow_query_log ON; -- 设置阈值超过 1 秒算慢建议调到 0.5~1 秒 SET GLOBAL long_query_time 1; -- 查看日志文件位置 SHOW VARIABLES LIKE slow_query_log_file; -- 可选记录没走索引的 SQL生产环境慎开可能刷爆日志 SET GLOBAL log_queries_not_using_indexes ON;开启后超过阈值的 SQL 会被记录到日志文件。2. 分析慢查询日志 —— 找出最该优化的日志是纯文本用工具聚合# MySQL 自带按总耗时排序取前 10 mysqldumpslow -s t -t 10 slow.log # Percona 工具分析更强大推荐 pt-query-digest slow.log它们能告诉你哪条 SQL 执行次数最多、总耗时最长、平均耗时最高。3. 实时查看正在执行的慢 SQL-- 看当前正在跑的查询 SHOW PROCESSLIST; -- 或查 information_schema筛出执行超过 1 秒的 SELECT * FROM information_schema.processlist WHERE time 1;4. 监控工具生产环境常用SkyWalking、ArthasAPM 工具从应用层定位到具体 SQL5. 用 EXPLAIN 分析 —— 判断为什么慢最关键EXPLAIN SELECT * FROM orders WHERE user_id 123;重点看这几列列含义关注点type访问类型从好到坏system const eq_ref ref range index ALL。出现ALL全表扫描要警惕key实际用的索引为NULL说明没走索引rows预估扫描行数越大越慢接近全表行数越危险filtered过滤后剩余百分比越低说明扫了很多无效行