问题描述
select column1,column2 from table1 left join table on .... where 条件unionselect column1,column2 from table2 left join table on .... where 条件unionselect column1,column2 from table3 left join table on .... where 条件只有 table1,table2,table3 不一样,其他都一样,这类的SQL 有优化的余地么? 问题补充:补充下场景:1. SQL 需要支持 My SQL, Oracle, SQL Server2. column1 是 table 那个表的, column2 是 count 出来的,条件后面其实还有 group by.3. 在这个SQL 外面还有一层 select * from (SQL) group by ... 的动作.
解决方案
1、union ---------> union all 到程序里排重2、3条sql单独查
解决方案二:
这个还是要根据实际业务场景,看数据量,以及要的结果数据。1、union all到程序里排如果数据量很大,应用是否能承受?2、单独查,累积结果,业务场景就是查询吗?会不会有分页及其它一类的操作?所以还是要根据实际业务场景。
解决方案三:
优化方式1:union(all|distinct)会在内存中新建一个虚拟表,然后把三个查询结果插入该虚拟表中。这其中union distinct(缩写为union)会涉及到去重的问题,所以在效率上会低于union all,可以将union 改为union all,然后在程序中执行去重优化方式2:可以分开三条语句分别执行,然后在程序中累加这三个结果,然后去重操作,这样效率也会有优化