一次 MySQL 慢查询的完整排查过程

一次 MySQL 慢查询的完整排查过程

jxjyjws
2026-09-28 / 3 评论 / 5 阅读 / 正在检测是否收录...

线上有个接口 P99 飙到 3.4s,最终定位到一条没走索引的 ORDER BY。

排查步骤

# 1. 打开慢日志
SET GLOBAL slow_query_log = 1;
SET GLOBAL long_query_time = 0.5;

# 2. 抓现场
pt-query-digest /var/log/mysql/slow.log --limit 5

EXPLAIN 里 rows 是 41 万,Extra 只有 Using where,没有 Using index——典型的排序落盘。

修复

ALTER TABLE typecho_contents
  ADD INDEX idx_status_created (status, created DESC);

加完索引,同一 SQL 从 2.8s 降到 41ms。

阶段耗时rows examined
原始2810ms412,663
强制索引320ms8,900
新复合索引41ms1,024
教训:DESC 索引在 MySQL 8.0 才真正生效,5.7 上只是解析通过。
0

评论 (3)

取消
  1. 头像
    路人甲 作者
    MacOS · Google Chrome
    @

    收藏了,正好在纠结要不要从 Hugo 换回来。

    回复
  2. 头像
    书虫 作者
    MacOS · Google Chrome
    @

    这个表格在手机上会溢出吧,建议套一层横向滚动。

    回复
  3. 头像
    dev_ilin 作者
    MacOS · Google Chrome
    @

    同遇到过快照锁,最后用 pt-online-schema-change 绕过的。

    回复