跳转至

SQL 慢查询如何处理

一、定位

1. 开启慢查询日志

slow_query_log = ON
long_query_time = 1   -- 超过 1 秒

2. EXPLAIN

EXPLAIN SELECT * FROM user WHERE ...

看 type、key、rows、Extra。

二、常见原因

  1. 没索引或索引失效。
  2. SELECT *。
  3. 关联查询太多 JOIN。
  4. 数据量太大。
  5. 服务器资源不足。

三、优化

1. 加索引

WHERE、ORDER BY、JOIN 字段加索引。

2. 避免索引失效

  • 不用函数:WHERE DATE(create_time) = ...
  • 不用隐式转换。
  • LIKE 不以 % 开头。
  • 联合索引遵守最左前缀。

3. 小结果集驱动大结果集

4. 分页优化

-- 慢
LIMIT 100000, 10

-- 快:先查主键
WHERE id > 100000 LIMIT 10

5. 拆分大 SQL

6. 读写分离

7. 分库分表

四、工具

  • explain:看执行计划。
  • show profile:看执行耗时。
  • mysqldumpslow:分析慢日志。

流程

慢查询日志 → explain → 找原因 → 加索引/改 SQL → 验证。