MySQL 慢查询优化:这5个技巧让查询速度提升10倍

数据库慢是很多网站性能瓶颈的根源。本文分享 5 个实战有效的 MySQL 优化技巧,直接拿去用。

01 开启慢查询日志,找到问题 SQL

优化之前先找到慢在哪。在 MySQL 配置文件里开启慢查询日志:

slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1

超过 1 秒的查询都会被记录。用 mysqldumpslow 分析日志,找出最慢的 SQL。

02 用 EXPLAIN 分析执行计划

在 SQL 前面加 EXPLAIN,看 MySQL 是怎么执行这条查询的:

EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';

重点看 type 字段:ALL 表示全表扫描(最差),ref 或 eq_ref 表示用了索引(好)。看到 ALL 就要考虑加索引了。

03 正确使用索引

索引是最有效的优化手段,但用错了反而更慢。几个原则:

WHERE 条件里的字段加索引;联合索引遵循最左前缀原则;不要在索引字段上做函数运算(会导致索引失效);区分度低的字段(比如性别)不适合加索引。

-- 正确:直接用字段值
WHERE create_time > '2026-01-01'

-- 错误:函数运算导致索引失效
WHERE YEAR(create_time) > 2026

04 避免 SELECT *

SELECT * 会查询所有字段,包括很多用不到的大字段(比如文章内容、图片 base64)。只查需要的字段,减少数据传输量:

-- 慢
SELECT * FROM articles WHERE id = 1;

-- 快
SELECT id, title, created_at FROM articles WHERE id = 1;

05 分页查询用 WHERE 代替 OFFSET

LIMIT 100000, 10 这种深分页查询极慢,MySQL 要扫描前 10 万条再丢弃。用 WHERE 条件替代:

-- 慢(深分页)
SELECT * FROM posts ORDER BY id LIMIT 100000, 10;

-- 快(游标分页)
SELECT * FROM posts WHERE id > 100000 ORDER BY id LIMIT 10;

这个优化在数据量大的时候效果非常明显,从几秒降到毫秒级。

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容