数据库慢是很多网站性能瓶颈的根源。本文分享 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













暂无评论内容