如何分析一个慢sql

用 EXPLAIN 看执行计划

EXPLAIN 看四个关键点:key 有没有命中索引、type 访问类型好不好、rows 扫描行数大不大、Extra 有没有回表/排序/临时表。

bash 复制代码
EXPLAIN SELECT * FROM orders WHERE user_id = 123 AND status = 1;
  • 通过 key 和 key_len 检查是否命中了索引:

    • key 为 NULL → 没走索引,可能存在索引失效

    • key_len → 判断联合索引实际用到了哪几列

  • 通过 type 判断访问类型,看是否有优化空间:

    • 好坏顺序:system > const > eq_ref > ref > range > index > ALL

    • 出现 ALL(全表扫描)或 index(全索引扫描)说明需要优化

  • 通过 rows 和 filtered 判断扫描代价:

    • rows 越大越慢,接近全表行数最危险

    • filtered 越低,说明扫了很多无效行

  • 通过 Extra 判断是否回表:

    • 有 Using index → 覆盖索引,不回表

    • 无 Using index 但 key 有值 → 可能回表

    • 出现 Using filesort / Using temporary → 排序或分组没走索引

    • 回表严重时,可尝试添加覆盖索引 或减少 SELECT 字段

相关推荐
2401_891409266 小时前
量化数据13:港股分钟K线、Level2逐笔Tick、十档盘口和港股通历史数据的批量提取
数据库
w-w0w-w12 小时前
SQL注入
网络·数据库·sql
tianyuanwo12 小时前
NetBox 数据库详解:当“关系型数据库”被装进一个网络运维的领域模型里
运维·数据库·netbox
一条泥憨鱼12 小时前
【计算机网络】短连接、长连接与连接池:从 TCP 握手到池化复用的完整链路
网络·数据库·网络协议·tcp/ip·计算机网络
IvorySQL13 小时前
深入 PostgreSQL WAL:从崩溃恢复到逻辑复制
数据库·postgresql
幽灵诶14 小时前
Mysql(基于测试的学习)
数据库·mysql
砚底藏山河14 小时前
python量化自定义周期 K 线合成
java·开发语言·数据库·python·金融
宇宙无敌暴龙战士66615 小时前
MySQL 8 库表操作学习笔记:SQL 基础、库表管理、约束与用户授权全流程
数据库·sql·mysql·学习笔记·后端开发
猿究院_夏燊15 小时前
MySQL 的四种隔离级别
java·数据库·mysql
say_fall15 小时前
【Linux系统编程】Ext 文件系统:磁盘与存储、文件与目录、现代计算机究竟如何寻找文件
linux·运维·服务器·数据库·c++