优化思路:
1.查询条件没走到索引时,考虑创建索引?
2.索引是否失效
- 数据类型不一致导致索引失效;
- where条件最左匹配原则;
- 不能在索引字段使用处理函数或表达式,因为这种操作会导致索引失效;
- NOT IN、!=、‘%w’导致索引失效;like
- 业务场景下SQL是否合理(jion表不能大于3张)超过三张表使用订单中心、商品中心查询;
3.尽可能少的查询表字段,不论是mapper文件还是Mybatis plus的写法。都必须显式指定要查询的字段,禁止select *。
4.某些区分度不高但是结果集占比很小的字段,强制走索引
5.热点数据和非热点数据隔离
优化小技巧:
1. 当前大多数表的主键是雪花生成,通过主键排序可以替代创建时间排序;
2. 当知道结果集只有一条的时候,带上limit 1,查到1条就会返回;
3. !=不会走索引,用> union < 来代替
4. 三表关联,a表(主表)、a关联b表,b表关联c表,谨慎使用c表的字段进行筛选
慢sql优化步骤建议:
1 先从sql本身,通过减少查询字段、优化索引、减少关联表 提示sql本身的性能
2 sql本身优化余地不多,则从业务角度进行拆分进行优化(优化关联表)等
3 业务本身改动大的,先记录下来讨论