如何分析一个慢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 字段

相关推荐
泡海椒3 小时前
JQuickExcel 大文件排障与调优:从实际路径定位 OOM、临时盘和慢任务
开发语言·数据库·缓存·oracle·excel
java_logo4 小时前
Docker 部署 MariaDB:轻松搭建开源关系型数据库
数据库·docker·容器·开源·mariadb·轩辕镜像·docker部署教程
tryxr4 小时前
什么情况下索引会失效
数据库·mysql·索引失效·索引
guo_wen_qiang4 小时前
redis持久化
数据库·redis·分布式
撸串-研究生4 小时前
社区流浪宠物领养救助系统【附源码】
mysql·springboot·宠物·社区公益服务
达梦数据4 小时前
达梦数据复制软件DMDRS搭建部署示例:源数据库DM8到目标数据库Kingbase V8一对一数据同步
数据库·oracle
我命由我123454 小时前
LRU 缓存淘汰策略
数据结构·redis·学习·mysql·算法·缓存·学习方法
ly76894 小时前
MongoDB 读写策略与一致性取舍:readConcern、readPreference 与 causal session
数据库·mongodb·writeconcern·readconcern·readpreference·因果一致性
天空属于哈夫克34 小时前
企业微信消息回调处理:如何避免慢查询拖垮整个服务?
数据库·php·企业微信