当前位置: 首页
数据库
MySQL生产环境定位全表扫描慢事务的排查方法

MySQL生产环境定位全表扫描慢事务的排查方法

时间:2026-07-19
转载

通过EXPLAIN的type字段为ALL、key为NULL、rows接近总行数等信号可判断全表扫描。使用SHOWPROCESSLIST或INFORMATION_SCHEMA PROCESSLIST快速定位慢查询。索引失效常见于函数调用、隐式类型转换、左模糊查询及联合索引顺序错误。建议优先覆盖WHERE条件加索引,并用pt-online-schema-chan

判断一条SQL语句是否正在执行全表扫描,最直接的方法就是查看`EXPLAIN`输出中的`type`字段。如果该字段显示为`ALL`,那就意味着确实没有使用索引——不是“可能”,而是确凿无疑。除此之外,还有几个关键信号值得重点关注:`key`字段为`NULL`、`rows`数量接近总行数、`Extra`里出现`Using where`但没有`Using index`。这些信号组合在一起,基本可以断定MySQL正在被迫执行全表扫描,性能堪忧。 如何在生产环境定位MySQL中那些导致全表扫描的慢事务? ## 怎么快速揪出正在全表扫描的 SQL? 不必等到慢查询日志积累大量数据后再去分析。直接连接生产数据库,执行`SHOW PROCESSLIST`命令,查看当前活跃会话中哪些正在扫描大表: - `State`是`Sending data`且`Time`超过几秒,大概率是在扫描; - `Info`字段里包含`SELECT` + 大量`WHERE`条件但缺少`ORDER BY`或`LIMIT`,尤其要留意有没有函数调用(比如`DATE(created_at)`这种); - 配合`INFORMATION_SCHEMA.PROCESSLIST`查询更全面:`SELECT ID, INFO, TIME FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND = 'Query' AND TIME > 3 AND INFO LIKE '%SELECT%';` ## EXPLAIN 里哪些信号说明它在全表扫描? `EXPLAIN`不是走马观花,重点盯住三个字段: - `type`是`ALL`:确凿证据,没有使用任何索引; - `key`是`NULL`:即使`possible_keys`有值,`key`为空也等于索引未被采用; - `rows`数字极大(比如超过50000):哪怕`type`是`index`,扫描整棵索引树也等价于全表扫描; - `Extra`出现`Using where`但没`Using index`:说明查询使用了索引还需要回表,如果`rows`很大,实际开销接近全表扫描。 ## 为什么明明建了索引还全表扫描?常见失效场景 索引存在 ≠ 被使用。以下几种写法会让MySQL直接放弃索引: - WHERE中对字段使用了函数:`WHERE YEAR(create_time) = 2026` → 改为`WHERE create_time >= '2026-01-01' AND create_time < '2027-01-01'`; - 隐式类型转换:`WHERE user_id = '123'`(`user_id`是INT类型)→ 字符串强制转为数字,索引失效; - LIKE左模糊:`WHERE name LIKE '%abc'` → 无法走B+树前缀匹配; - 联合索引顺序错误:`INDEX(a,b,c)`,但查询只用`WHERE c = 1` → 不满足最左前缀原则,直接跳过。 ## 线上不敢随便改 SQL?先加索引试试 如果确认是缺失索引导致的`ALL`,添加索引比重写业务逻辑快得多,但需要注意: - 优先覆盖`WHERE`条件字段,再追加`ORDER BY`和`SELECT`字段(做成覆盖索引); - 避免单列索引堆砌,比如`WHERE a=1 AND b=2`,建`INDEX(a,b)`比分别建两个单列索引更好; - 加索引前使用`pt-online-schema-change`或MySQL 8.0+的`ALGORITHM=INSTANT`,避免锁表; - 加完索引后立即用`EXPLAIN`验证,不要相信“应该能走”。 全表扫描本身并不致命,致命的是它出现在高频接口或大表上。真正麻烦的是那些`rows`显示几千、但实际执行扫了百万行的SQL——`EXPLAIN`的预估不准时,需要借助`SHOW PROFILE`或性能模式(`performance_schema`)查看真实I/O开销。

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
Redis是什么:核心特性、架构与应用场景解析

Redis是什么:核心特性、架构与应用场景解析

Redis是一款基于内存的键值型NoSQL数据库,以超高读写速度和丰富的数据结构著称。本文系统梳理Redis的核心特性、架构组成、性能优势及典型应用场景,并通过与Memcached、MySQL、MongoDB的对比,帮助开发者快速判断Redis是否适合当前业务需求。

时间:2026-09-01 06:20
Windows 安装 MongoDB 完整图文教程

Windows 安装 MongoDB 完整图文教程

本文详细介绍在 Windows 系统上安装 MongoDB 的完整流程。从官网下载 MSI 安装包开始,逐步演示自定义安装路径、配置 Windows 服务、跳过 MongoDB Compass 等关键选项,并提供通过系统服务列表验证安装是否成功的方法,帮助开发者快速搭建本地 MongoDB 环境。

时间:2026-09-01 06:20
Linux 安装 MongoDB 完整指南:依赖配置、环境变量与服务启动

Linux 安装 MongoDB 完整指南:依赖配置、环境变量与服务启动

本文详解在 Linux 系统下安装 MongoDB 的完整流程,涵盖依赖包安装、二进制包下载解压、环境变量配置、数据与日志目录创建及服务启动验证。通过标准化命令与路径说明,帮助开发者快速完成部署并确认服务状态。

时间:2026-09-01 06:20
MacOS安装MongoDB完整教程

MacOS安装MongoDB完整教程

本文介绍在MacOS系统下安装MongoDB的完整流程,涵盖下载、解压、目录配置、环境变量设置及服务启动。通过明确的命令与参数说明,帮助开发者快速完成环境搭建并验证安装结果。

时间:2026-09-01 06:19
Ubuntu系统安装与配置Redis完整指南

Ubuntu系统安装与配置Redis完整指南

本文详解在Ubuntu系统中安装Redis的两种主流方式:apt在线安装与源码编译安装。涵盖版本选择逻辑、服务启停与状态检查、连接验证方法,以及在线练习工具与桌面GUI客户端的对比与使用建议,帮助开发者快速搭建并验证Redis运行环境。

时间:2026-09-01 06:19
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全