十几个大表left join的大SQL查询优化

问题

  • 十几个表关联查询,有子查询,并表和left join表查询,由于近期上了生产,每天都有几万条应用,查询一个星期内的数据,用了几十分钟,导致触发熔断机制

获取生产环境中的sql

  • 下载日志
  • 获取到执行的sql
  • 替换参数
  • 得到完整的带参数的sql

测试环境复现失败

  • 在测试环境上未能复现成功,但是上线就会出现这个问题
  • 让测试结构复现数据,不可行,数据成分不一致,可能效果完全不同
  • 并且有那么多表,要进行构造数据也是很麻烦的
  • 最后是去现网导出相关表的数据,进行复现

分析sql

  • 去掉不影响查询效率的sql
  • 然后进行分析主要的sql看一看为什么会慢

从sql优化下手

  • 分析数据库索引,是否left join字段没有添加索引,没有发现问题
  • 分析数据库执行计划,explain,没有发现问题
  • 分析数据量,大多是几百万几千万数据量的超大表

优化建议

  • 小表left join大表,大表放在后面

  • 用子查询进行查询,缩小数据量

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐