SQL 优化

[code="sql"]
select column1,column2 from table1 left join table on .... where 条件
union
select column1,column2 from table2 left join table on .... where 条件
union
select column1,column2 from table3 left join table on .... where 条件
[/code]

只有 table1,table2,table3 不一样,其他都一样,这类的SQL 有优化的余地么?

anduo1989
classtag 请楼主不错一下。column1,column2 是从那个表出来的。 如 select t1.column1,t2.column2 from t1 left jion t1 on........
7 年多之前 回复

3个回答

1、union ---------> union all 到程序里排重
2、3条sql单独查

weixin_42505352
打小就贼不听话 果然早啊! 数据应该最多最多是几十万级别的,其实我也倾向于[2],拼接SQL真是深恶痛绝.
7 年多之前 回复
jinnianshilongnian
jinnianshilongnian 因为在这个SQL外面其实还有一层 group by 的动作,所以倾向于方法1 也是就是在这个组合外层还group了下 数据量大吗 如果不大 1应该比2快 毕竟少走了几次来回,, 否则2应该比较快 不过如果我选择的话可能选择2,或者能不能定期汇总之类的 或 缓存等。 你试下【2】的速度满足你的需求吗
7 年多之前 回复
weixin_42505352
打小就贼不听话 方法 1 对于方法 2 比较,1 会比较慢吗? 因为在这个SQL外面其实还有一层 group by 的动作,所以倾向于方法1.
7 年多之前 回复

优化方式1:union(all|distinct)会在内存中新建一个虚拟表,然后把三个查询结果插入该虚拟表中。这其中union distinct(缩写为union)会涉及到去重的问题,所以在效率上会低于union all,可以将union 改为union all,然后在程序中执行去重
优化方式2:可以分开三条语句分别执行,然后在程序中累加这三个结果,然后去重操作,这样效率也会有优化

weixin_42505352
打小就贼不听话 嗯,明白了,其实是不需要去重的.就是说,如果不需要去重 union 效率是没有 union all 高的.
7 年多之前 回复

这个还是要根据实际业务场景,看数据量,以及要的结果数据。
1、union all到程序里排如果数据量很大,应用是否能承受?
2、单独查,累积结果,业务场景就是查询吗?会不会有分页及其它一类的操作?
所以还是要根据实际业务场景。

weixin_42505352
打小就贼不听话 承受是没问题,就是这类的SQL可否优化,让它执行的更快. 就是查询,不需要分页,但要支持 My SQL, Oracle, SQL Server.
7 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐