5个让MySQL查询飞起来的实用技巧
MySQL 用得好是神器,用不好就是“查询慢如牛”。分享几个我踩坑无数后总结的技巧,帮你少走弯路。
1. 避免 SELECT *,只取所需字段
SELECT * 会返回所有列,不仅浪费网络带宽,还会让覆盖索引失效。只取需要的字段,比如 SELECT id, name,性能提升立竿见影。
2. 合理使用 EXPLAIN 分析执行计划
写好的查询别急着跑,先 EXPLAIN 一下。重点关注 type 列:ALL 代表全表扫描,要尽量优化到 ref 或 range;key 列显示实际用到的索引,如果是 NULL 说明没走索引。
3. 索引不是越多越好
每多一个索引,INSERT/UPDATE/DELETE 就要多维护一棵 B+ 树。遵循“最左前缀原则”,比如联合索引 (a, b, c),能覆盖 a、a,b、a,b,c 的查询,但单独查 b 用不上。冗余索引(如已有 (a) 又建 (a,b))建议删除。
4. 慎用 LIKE '%keyword%'
前置通配符会让索引失效,只能全表扫。如果业务允许,改为 LIKE 'keyword%' 或使用全文索引 MATCH ... AGAINST。
5. 分页深翻页优化
LIMIT 100000, 10 会先扫 10 万条再丢弃,效率极低。改用“延迟关联”或“记录上次位置”:
-- 延迟关联:先查主键,再回表
SELECT * FROM posts
WHERE id IN (SELECT id FROM posts ORDER BY id LIMIT 100000, 10);
更优方案:记住上一页最大 id,WHERE id > last_id ORDER BY id LIMIT 10。
用好这 5 招,告别慢查询。你还遇到过哪些 MySQL 的坑?欢迎讨论!