十几个大表left join的大SQL查询优化
十几个大表left join的大SQL查询优化问题十几个表关联查询,有子查询,并表和left join表查询,由于近期上了生产,每天都有几万条应用,查询一个星期内的数据,用了几十分钟,导致触发熔断机制获取生产环境中的sql下载日志获取到执行的sql替换参数得到完整的带参数的sql测试环境复现失败在测试环境上未能复现成功,但是上线就会出现这个问题让测试结构复现数据,不可行,数据成分不一致,可能效果完
·
十几个大表left join的大SQL查询优化
问题
- 十几个表关联查询,有子查询,并表和left join表查询,由于近期上了生产,每天都有几万条应用,查询一个星期内的数据,用了几十分钟,导致触发熔断机制
获取生产环境中的sql
- 下载日志
- 获取到执行的sql
- 替换参数
- 得到完整的带参数的sql
测试环境复现失败
- 在测试环境上未能复现成功,但是上线就会出现这个问题
- 让测试结构复现数据,不可行,数据成分不一致,可能效果完全不同
- 并且有那么多表,要进行构造数据也是很麻烦的
- 最后是去现网导出相关表的数据,进行复现
分析sql
- 去掉不影响查询效率的sql
- 然后进行分析主要的sql看一看为什么会慢
从sql优化下手
- 分析数据库索引,是否left join字段没有添加索引,没有发现问题
- 分析数据库执行计划,explain,没有发现问题
- 分析数据量,大多是几百万几千万数据量的超大表
优化建议
-
小表left join大表,大表放在后面
-
用子查询进行查询,缩小数据量
更多推荐
已为社区贡献6条内容
所有评论(0)