select Areacode,sum(Number) as Number
from (select Areacode,sum(Number) as Number from 表一 group by Areacode
union all
select Areacode,sum(Number) as Number from 表二 group by Areacode) as a
group by Areacode
from (select Areacode,sum(Number) as Number from 表一 group by Areacode
union all
select Areacode,sum(Number) as Number from 表二 group by Areacode) as a
group by Areacode
from (select * from 表一
union all
select * from 表二 ) as a
group by Areacode
from (select Areacode,Number from 表一
union all
select Areacode,Number from 表二 ) as a
group by Areacode这样的速度会快一些,不用进行多次汇总。
而下面的方法,第一步进行关联,然后就是分组汇总,等到结果。
你觉得这两种语句,那个快?
from (select Areacode,sum(Number) as Number from 表一 group by Areacode
union all
select Areacode,sum(Number) as Number from 表二 group by Areacode) as a
group by Areacode2. 如果Areacode的值的数量与表中的记录数相差不大,可以考虑
select Areacode,sum(Number) as Number
from (select * from 表一
union all
select * from 表二 ) as a
group by Areacode
上面的语句,数据库的查询计划会多出一步
1、对两个表进行分组会中
2、对汇总的结果关联
3、对关联的结果在进行分组汇总
下面的语句
1、对汇总的结果关联
2、对关联的结果在进行分组汇总
虽让上面的语句查询计划只多出一步,但是同样会占内存与CPU,而且分组汇总本身就是一个耗时的查询,在数据量大的时候,会有明显的速度问题。
你仔细想想,做一次和做两次同样的工作,那个快,那个慢?
from (select * from table1
union all
select * from table2) a
group by Areacode
建立一个临时表(无主键),将表1、表2的数据全部导入临时表,剩下的问题就是个分组求和的问题了。简单吧!
但现在不是做JION的关联,而是union all,不是实际的字段关联,而是虚拟的相加,不论你记录多,还是记录少,都是一样的付加,可能纪录多时,附加的速度会慢一些,可是慢这一点速度,要比分组汇总少的多,这样的操作,你觉得那种快。
nononono(null,null) 我明白你的意思。嘻嘻