【发布时间】:2017-05-17 20:48:14
【问题描述】:
假设我想从 2 个表中提取字段 dim,a,b,c,d,其中一个包含 a,b,另一个包含 c,d。
我想知道是否有首选方式(在以下方式之间) - 性能方面:
1:
select t1.dim,a,b,c,d
from
(select dim,sum(a) as a,sum(b)as b from t1 group by dim)t1
join
(select dim,sum(c) as c,sum(d) as d from t2 group by dim)t2
on t1.dim=t2.dim;
2:
select dim,sum(a) as a,sum(b) as b,sum(c) as c,sum(d) as d
from
(
select dim,a,b,null as c, null as d from t1
union
select dim,null as a, null as b, c, d from t2
)a
group by dim
当然在处理大量数据时(最终查询时为 5-30M 记录)。
谢谢!
【问题讨论】:
-
检查两个查询的执行计划。
-
谢谢@Viki888,但我问的是一般情况,这只是一个例子。
-
正如 Gordon 在下面提到的那样,您肯定想要
union all而不是union,因为您不关心重复。在不测试特定案例的情况下,我会选择 Redshift 的 2 号。由于它是分布式列式存储,因此您必须将相同的数据移动到计算节点,但第二种情况没有连接的开销。求和是一种快速的内存操作。但是是的...查询执行计划。
标签: sql performance join union amazon-redshift