union all 一定比 多条SQL性能好吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了union all 一定比 多条SQL性能好吗?相关的知识,希望对你有一定的参考价值。
例如我查询我的用户总的人数,男用户人数,女用户人数
select count(userid) from userinfo
union all
select count(userid) from userinfo where sex = '男'
union all
select count(userid) from userinfo where sex = '女'
上面的SQL 在查询10万条数据以内的话
一定比
我同时查询3次
select count(userid) from userinfo
select count(userid) from userinfo where sex = '男'
select count(userid) from userinfo where sex = '女'
的性能要好吗?
如果你在sex字段上加了索引,那么第一个查询是全表扫描,第二,第三个是索引扫描.
最好用一个查询就搞定.(不是带union all的那种)
select sex, count(userid) from userinfo group by sex
这个就只需要一次全表扫描,比你那两个都快.(总用户用男的加女的就可以,不需要另外查询.) 参考技术A 别人用union all来代替一般查询的时候
一般情况好像是代替 带有OR条件的WHERE语句
比方LZ的查询是
select count(userid) from userinfo where sex = '男' OR sex = '女'
由于OR引起全表扫描 并且不能用到索引
所以改为 union all 的方式代替带OR的WHERE语句
我用的SQLSERVER
运行的语句可以看 执行计划或用SQL命令来看IO消耗与CPU消耗 来判断哪种性能高
SET STATISTICS IO ON
SET STATISTICS TIME ON
在查询结果‘消息’选项卡 就能看到 参考技术B 集合运算大多数时候是为了让你的那些复杂的条件的查询看起来更容易,呵呵,因为它被分解了。至于在速度上通常来说union all 不要排序和单条执行的速度大体相当,但是union因为要排序速度会下降很多的。具体的情况当然要看你如何优化自己的SQL语句了,没有绝对的快慢的。
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 的性能以上是关于union all 一定比 多条SQL性能好吗?的主要内容,如果未能解决你的问题,请参考以下文章
ORACLE 两个order by的SQL使用 UNION 或者 UNION ALL 报错 ORA-00933:sql命令未正确结束