目录
2.3.7 extra:range checked for each record
一 慢sql优化
1.1 策略
1.1.1 对于in语句的优化
MySQL 的优化器在处理IN时,会先把子查询结果放到一个临时表,然后在外层表里逐行对比。这个过程相当于你拿着5万人的名单挨个查。优化方法
1.使用exits 代替in;2.使用left join+is null代替 not in
https://mp.weixin.qq.com/s/8MBt_MxywSB3v3caARIeHg
1.1.2 索引字段使用函数或计算,索引功能失效
对索引字段使用函数会使索引失效,变成全表扫描
| SELECT * FROM orders WHERE DATE_FORMAT(create_time, '%Y-%m-%d') = '2024-01-01'; 改为:使用范围查询 SELECT * FROM orders WHERE create_time >= '2024-01-01' AND create_time < '2024-01-02'; SELECT * FROM products WHERE price + 100 > 500;改为: SELECT * FROM products WHERE price > 400; |
1.1.3 为高频建立索引
针对不同场景,设置索引

1.1.4 批量操作:大幅减少IO次数
性能提升:插入1000条数据,批量操作比单条插入快50倍!

1.1.5 谨慎设置null值
设置成默认值,不用null


1.2 案例
优化结果: 2.3s → 0.02s
| SELECT * FROM orders |
优化方案:创建复合索引
| CREATE INDEX idx_orders_user_status_time ON orders(user_id, status, create_time); |
1.3 慢sql的开启
1.慢sql的配置

2.慢sql的查看


最低0.47元/天 解锁文章
1303

被折叠的 条评论
为什么被折叠?



