如何医治一条慢SQL?

findByTime(@Param(“time”) Date time);

**消毒方案**:
1. SQL审核平台接入(如Yearning)
2. MyBatis拦截器拦截全表更新
3. 自动化EXPLAIN分析流水线
### 3.2 查杀大表癌症
如果遇到大表的癌症病例,可以用分库分表的方案解决。
**病历案例**:3亿订单表终极解决方案
```yml
// Sharding-JDBC分片配置
spring.shardingsphere.rules.sharding.tables.orders.actual-data-nodes=ds$0..1.orders_$->{2020..2023}
spring.shardingsphere.rules.sharding.tables.orders.table-strategy.standard.sharding-column=create_time
spring.shardingsphere.rules.sharding.tables.orders.table-strategy.standard.sharding-algorithm-name=time_range

化疗方案

  • 时间维度分片(2020~2023年度表)

  • 用户ID取模分库

  • 冷热分离(OSS归档历史数据)

    医嘱总结

    优化三板斧

  1. 定位:慢查询日志+执行计划分析
  2. 切割:化繁为简拆分多步执行
  3. 重建:符合业务场景的数据结构 避坑口诀
  • 索引不是银弹,覆盖才是王道
  • Join水深,能拆就拆
  • Order By+Limit≠分页优化 当你优化SQL到怀疑人生时,不妨试试这三味药:
  1. 删业务逻辑
  2. 加缓存
  3. 换数据库