news 2026/4/28 7:27:49

mysql 慢查询如何快速定位

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
mysql 慢查询如何快速定位

面试标准满分回答(简洁、条理清晰、面试官最爱)

面试官您好,MySQL 慢查询我一般按实时排查 + 日志溯源 + SQL分析三步快速定位:

  1. 实时抓现场SQL
    先执行show full processlist;,查看当前正在执行的SQL,通过执行时间Time、执行状态,直接定位正在阻塞、耗时久的慢SQL,快速解决线上即时卡顿问题。

  2. 通过慢查询日志精准溯源
    提前开启MySQL慢查询日志,设置合理阈值(一般1秒),记录超时SQL和未走索引的语句;
    使用MySQL自带mysqldumpslow工具,按耗时、访问次数排序,批量筛选出高频慢SQL。

  3. SQL执行计划分析根因
    拿到慢SQL后,用explain分析执行计划,重点检查:
    type是否全表扫描、key是否命中索引、扫描行数rows是否过多;
    大部分慢查询根源都是无索引、索引失效、大分页、多表低效join,针对性优化即可。


MySQL 慢查询:快速定位 + 排查(最实用版)

我给你一套最快、最直接、生产环境通用的慢查询定位方法,不用复杂工具,5 分钟就能找到慢 SQL。


一、先看 3 个关键配置(开启慢查询)

先确认慢查询是否开启,这是定位的基础。

-- 查看慢查询是否开启SHOWVARIABLESLIKE'slow_query_log';-- 查看慢查询阈值(超过这个时间就算慢查询,默认 10 秒,建议改成 1 秒)SHOWVARIABLESLIKE'long_query_time';-- 查看慢查询日志存放路径SHOWVARIABLESLIKE'slow_query_log_file';

临时开启(重启 MySQL 失效)

SETGLOBALslow_query_log=1;SETGLOBALlong_query_time=1;-- 超过 1 秒就算慢查询

永久开启(my.cnf / my.ini)

slow_query_log = 1 long_query_time = 1 slow_query_log_file = /var/lib/mysql/slow.log log_queries_not_using_indexes = 1 # 没走索引的 SQL 也记录

二、最快定位慢 SQL 的 3 种方法

方法 1:直接看慢查询日志(最准)

# 直接查看最新慢 SQLtail-n100/var/lib/mysql/slow.log# 按时间排序,找最慢的 SQLmysqldumpslow-st /var/lib/mysql/slow.log

mysqldumpslow是 MySQL 自带工具,不用安装,直接用

常用命令:

# 取出访问量最高的 10 条慢 SQLmysqldumpslow-sc-t10slow.log# 取出时间最长的 10 条mysqldumpslow-st-t10slow.log

方法 2:实时查看正在执行的 SQL(最快)

-- 查看当前正在跑的 SQLSHOWFULLPROCESSLIST;-- 过滤出 执行时间 > 1 秒 的 SQLSELECT*FROMinformation_schema.PROCESSLISTWHERETIME>1ANDINFOISNOTNULL;

看到Time 很大、State 为 Sending data的 SQL,99% 就是慢查询


方法 3:查看性能视图(5.7+ / 8.0 支持)

-- 查看耗时最高的 SQLSELECT*FROMsys.schema_table_statisticsORDERBYtotal_latencyDESCLIMIT10;-- 查看全表扫描最多的 SQL(没走索引)SELECT*FROMsys.statement_analysisWHEREfull_scan='YES'LIMIT10;

三、找到慢 SQL 后,怎么判断为什么慢?

EXPLAIN一看就懂!

EXPLAINSELECT*FROMordersWHEREuser_id=1001;

重点看 3 列:

  1. type:最好是 ref / range,最差是 ALL(全表扫描)
  2. key:显示 NULL = 没走索引
  3. rows:扫描行数越大越慢

只要出现:

  • type = ALL
  • key = NULL

就是没走索引,慢 100% 是这个原因。


四、慢查询 90% 都是这 4 个原因

  1. 没加索引 / 索引失效(最常见)
  2. **SELECT *** 查太多字段
  3. LIMIT 太大(如 LIMIT 100000,10)
  4. join 太多表、子查询太深

五、最快定位流程(背下来)

  1. 开启慢查询:set global slow_query_log=1;
  2. 看慢日志:mysqldumpslow -s t slow.log
  3. 找到慢 SQL
  4. EXPLAIN看是否走索引
  5. 加索引 / 优化 SQL

总结

  • 慢查询日志是定位慢 SQL 的最准方式
  • show processlist适合实时抓正在卡的 SQL
  • EXPLAIN是判断是否走索引的神器
  • 90% 慢查询 =没索引 or 索引失效

精简背诵版(短回答,直接背)

首先用show full processlist实时查看正在运行的长耗时SQL;
再依靠慢查询日志,结合 mysqldumpslow 工具筛选历史慢SQL;
最后通过 explain 分析执行计划,判断是否存在全表扫描、索引失效等问题,完成快速定位与优化。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/28 7:20:57

JAX高性能机器学习框架:原理、实践与优化

1. 为什么选择JAX作为高性能机器学习框架第一次接触JAX是在处理一个需要自动微分的物理模拟项目时。当时被它简洁的API设计和惊人的计算速度所震撼——相比传统框架,同样的模型在JAX上运行速度提升了3倍以上。JAX本质上是一个结合了NumPy接口、自动微分和硬件加速的…

作者头像 李华
网站建设 2026/4/28 7:19:54

Nanbeige 4.1-3B WebUI应用:打造专属二次元风格AI对话伙伴

Nanbeige 4.1-3B WebUI应用:打造专属二次元风格AI对话伙伴 1. 引言:当大模型遇见二次元美学 在本地部署大语言模型时,一个直观友好的交互界面往往能大幅提升使用体验。今天我们要介绍的Nanbeige 4.1-3B Streamlit WebUI,正是将强…

作者头像 李华
网站建设 2026/4/28 7:19:51

C++ 性能瓶颈分析与优化

在工业界,一个程序从“能跑”到“跑得快”,中间隔着巨大的鸿沟。特别是对于图像处理(如 YOLO 部署),每一毫秒都至关重要。 我们将分两步走: 找病灶:使用工具精准定位瓶颈。动手术:…

作者头像 李华
网站建设 2026/4/28 7:09:55

AI安全评估:从黑盒到白盒的深度实践

1. 项目概述:AI安全评估的现状与挑战在人工智能技术快速发展的今天,大型语言模型(LLM)和多模态模型(MLLM)的安全性问题已成为行业关注的焦点。随着模型能力的不断提升,其潜在风险也呈现出复杂化…

作者头像 李华
网站建设 2026/4/28 7:09:19

使用distilabel自动化构建高质量AI反馈数据集

1. 项目概述:用distilabel构建AI反馈数据集在大型语言模型(LLM)训练过程中,对齐(Alignment)是确保模型输出符合人类价值观的关键环节。传统的人工标注反馈数据成本高昂且效率低下,而distilabel这个开源工具链提供了一套自动化构建高质量AI反馈…

作者头像 李华
网站建设 2026/4/28 7:07:59

终极指南:MAA明日方舟助手 - 一键解放双手的智能游戏伴侣

终极指南:MAA明日方舟助手 - 一键解放双手的智能游戏伴侣 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: https://…

作者头像 李华