oracle两张表union all的时候取 count有两种sql写法,哪种效率比较好?

selectsum(tmpcount)from(selectcount(*)astmpcountfromtab1unionallselectcount(*)astmpco... select sum(tmpcount) from (
select count(*) as tmpcount from tab1
union all
select count(*) as tmpcount from tab2
)

select count(*) from (
select * as tmpcount from tab1
union all
select * as tmpcount from tab2
)
两段sql数据量大的时候哪个效率最高?
展开
 我来答
百度网友8bc4c69
推荐于2016-01-28 · TA获得超过205个赞
知道答主
回答量:28
采纳率:0%
帮助的人:0
展开全部
应该是一样快的……

其实我一开始也不清楚,但是手头正好有大表,于是自己动手试了试,实验表的数量级为3亿,这是一般实际项目中能涉及到的最大数量级了。

实践结果表明二者耗费是等同的。但是过程实际上是存在差别的。

首先我们可以排除两种方法括号外的耗费。因为无论是select sum 还是 select count(*) 都基本不占用多少资源。大部分资源都被括号里面的sql所占用了。

你的第一种方法相当于分别计算两次select count(*) as tmpcount from tab 这个操作,然后最终耗费时间相当于两次操作的计算之和。

第二种方法则是一次性计算出select * as tmpcount from tab1 union all select * as tmpcount from tab2 这个操作的耗费。

不过因为实际无论是第一种还是第二种,本质上都是遍历两个表。所有即便第一种耗费为600+400=1000,第二种耗费为1000,两者效率依然是一样的。
ylongshao1987
2011-02-21 · TA获得超过9811个赞
知道小有建树答主
回答量:1277
采纳率:100%
帮助的人:707万
展开全部
不知道你是要得到一个什么样的结果。你这里两个查询得到的结果是不同的,你第一个查询得到的是两个数据,而第二个查询得到的只有一个数据。显然你的查询时写错了,按你的大概意思,是否是要得到两个表中数据相同的的条数?第二个查询时对的,第一个不对。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式