5个让MySQL查询飞起来的实用技巧
MySQL 性能调优是每个后端开发者的必修课。下面分享 5 个亲测有效的优化技巧。
1. 巧用覆盖索引,避免回表
当索引中包含查询所需的所有字段时,MySQL 无需回表取数据。例如:
-- 慢:select * from user where age > 20
-- 快:建立联合索引 (age, name, phone)
select name, phone from user where age > 20
尽量用 select 具体字段,避免 *。
2. 慎用函数和隐式转换
在索引列上使用函数会导致索引失效:
-- 失效:where date(create_time) = '2025-01-01'
-- 有效:where create_time between '2025-01-01' and '2025-01-01 23:59:59'
同样,varchar 字段传数字(隐式转换)也会让索引失效。
3. 批量操作优于循环单条
插入或更新 1000 条数据时,一条 insert into ... values (...),(...),... 比 1000 次单条插入快几十倍。删除或更新时也可用 in 或临时表批量处理。
4. 合理设置 join 缓冲区
对于大表 join,增大 join_buffer_size 可减少临时文件。但注意是会话级变量,不要全局设得过大。
set session join_buffer_size = 64 * 1024 * 1024;
5. 用 explain 读懂执行计划
explain select ... 输出中重点关注:
type:至少达到range或ref,避免ALL(全表扫描)Extra:出现Using filesort或Using temporary时考虑加索引优化排序或分组
小贴士:慢查询日志 + pt-query-digest 是定位问题的最佳搭档。
优化无止境,掌握这些基础技巧,你的 MySQL 响应速度就能上一个台阶。