为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm8
【操作系统】:linux
【CPU】:32核
【问题描述】*:
需要做数据汇总,大概200个union all,每个查询中都是不同的sum求和,索引加过了,还有什么办法能优化查询速度
无论哪种数据库,大量的连接查询都会降低查询效率,都是建议优化业务逻辑,减少连接查询所涉及的表,或者减少表的数据量
如果常真/常假条件是为了不同区划取数视图时替换使用,且区划编码是符合按前6位范围取值规则的话,看看是否能够把目前的substr方式修改成like方式,并取出OR拼接的常假条件。
类似于
同时,b1、b2两子查询中分组列与SELECT子句字段列表不一致,如果areacode只取前6位区划编码就可以的话,是否能够按前6位编码分组,这样union前后两段查询可以合并到一起。
类似于
另外,可以考虑给 tz010_qz 表上新增针对 month,year,SUBSTR(t1.AREACODE,1,6)的组合索引,以提升数据检索效率。
手头没有环境,你测试下这个方案是否正确以及效率是否能有所改善。
可以把其中的一些union all 里面的sql语句和其执行计划发出来看看