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数据量大的时候哪个效率最高? 展开
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数据量大的时候哪个效率最高? 展开
展开全部
应该是一样快的……
其实我一开始也不清楚,但是手头正好有大表,于是自己动手试了试,实验表的数量级为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,两者效率依然是一样的。
其实我一开始也不清楚,但是手头正好有大表,于是自己动手试了试,实验表的数量级为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,两者效率依然是一样的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询