慢查询与 EXPLAIN

打开慢日志

SET PERSIST slow_query_log = ON;
SET PERSIST long_query_time = 1;
SET PERSIST log_output = 'FILE';

文件路径看 slow_query_log_file。日志里可能有业务数据,转存前脱敏。

Performance Schema 的 events_statements_summary_by_digest 适合看「哪类 SQL 最耗」。

SELECT digest_text, count_star, avg_timer_wait/1e12 AS avg_s
FROM performance_schema.events_statements_summary_by_digest
ORDER BY sum_timer_wait DESC
LIMIT 20;

EXPLAIN

EXPLAIN FORMAT=TREE
SELECT id, status
FROM shop_app.orders
WHERE user_id = 42
  AND created_at >= '2026-01-01';

传统表格里优先看:

  • typeref / range 通常好过 ALL
  • key:有没有用到你以为的索引
  • rows:估行
  • ExtraUsing filesortUsing temporary

8.0 的 EXPLAIN ANALYZE 会真跑,别在高峰对超大结果集直接做。

注意

缺索引不是唯一原因。隐式转换、函数包列、or 两端类型不一致,都会让索引失效。先把谓词写干净,再加索引。

参考:EXPLAIN Output