比方说,我有以下查询:Redshift能够优化重复聚合表达式吗?
SELECT sum(a), sum(b), sum(a) - sum(b)
FROM salelines
希望它应该只需要做sum(a)
和sum(b)
曾经因为第三栏可以重用这些聚集。这里是EXPLAIN
:
XN HashAggregate (cost=35.21..41.90 rows=535 width=22)
-> XN Seq Scan on salelines (cost=0.00..15.65 rows=1565 width=22)
然而,有趣的是,如果我改变列是这样的形式,它不应该是能够优化出:
SELECT sum(a), sum(b), sum(a - b)
FROM salelines
首先,我得到一个不同的平均成本,这将表明查询规划实际上治疗的陈述不同的地方:
XN HashAggregate (cost=31.30..36.65 rows=535 width=22)
-> XN Seq Scan on salelines (cost=0.00..15.65 rows=1565 width=22)
但是,什么是最有趣的是这个查询计划表明,这样做实际上应该更快。我知道cost
不直接涉及查询的性能。
我的问题是:
是红移能够优化出来的表情,或者它实际上会更快地让红移做一个第三集合与它的极端柱总体性能呢?