sql中,只使用union和先union all再distinct,两种方式哪个效率高?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql中,只使用union和先union all再distinct,两种方式哪个效率高?相关的知识,希望对你有一定的参考价值。
sql中,只使用union和先union all再distinct,两种方式哪个效率高?
distinct通常不建议使用,效率较低;union all 和union 而言,union all效率更高;原因是:union 相当于多表查询出的数据进行去重然后再进行排序后返回,而union all是多表查询合并去重后就直接返回 参考技术A Distinct可以说是数据查询中最耗时最耗性能的操作了,去重统计是数据查询不可言说的痛,所以不到万不得已不要用,另外,union all 后在distinct的效率如果更高的话,那union存在的意义是什么?所以可想而知,union的效率更高啊 参考技术B 在大数据量的情况下distinct + union all 性能大于 UNION 的性能ORACLE 两个order by的SQL使用 UNION 或者 UNION ALL 报错 ORA-00933:sql命令未正确结束
在oracle sql中,要求order by是select语句的最后一个语句,而且一个select语句中只允许出现一个order by语句,而且order by必须位于整个select语句的最后。
union操作实际上做了两部分动作:结果集合并 + 排序,
union all只进行结果集简单合并,不做排序,效率比union高 。
例子: 表一:table1 查询语句 : select * from table1 t1 order by t1. c1 ;
表二:table2 查询语句 : select * from table1 t2 order by t2.c1 .
需求:合并表一表二结果集,使用union 或者 union all 都会报错:ORA-00933 sql命令未正确结束。
原因:oracle 认为第一个order by结束后整个select语句就该结束了,但是发现后面没有逗号(;)或斜线(/)结束符,反而后边有 union all 或者 union,即sql语句并未结束,所以报错。
解决:使用 with ... as ... select ...
with s1 as (select * from table1 t1 order by t1. c1 ),
s2 as ( select * from table1 t2 order by t2.c1 )
select * from s1 union all (此处可以换为 union ) select * from s2
参考:https://blog.csdn.net/zhx624/article/details/20373785
以上是关于sql中,只使用union和先union all再distinct,两种方式哪个效率高?的主要内容,如果未能解决你的问题,请参考以下文章
ORACLE 两个order by的SQL使用 UNION 或者 UNION ALL 报错 ORA-00933:sql命令未正确结束