这个 Teradata 查询效率低吗?

is this Teradata query inefficient?

我的经理在 Teradata 的海量视图中使用这样的查询。到 运行.

需要 10 分钟
select c1, c2, sum(c3), sum(c4) etc. 
from (select * from v1 where [some condition]) v1
left join (select * from v2 where [some condition]) v2
on v1.some_id = v2.some_id
group by 1, 2;

视图 v1 和 v2 非常大 - 大约有十亿行和数千列。但我们只 selecting 了少数几列。那么做一个“select *”是不是效率低下?

如果我只指定我们需要的列而不是“select *”,是否有助于查询?我知道这不会有什么坏处,所以无论如何我都会这样做,我只是想确认 Teradata 的行为和逻辑。

这可能是有效的。我可以更简洁地写成:

select c1, c2, sum(c3), sum(c4) etc. 
from v1 left join
     v2
     on v1.some_id = v2.some_id and <conditions on v2>
where <conditions on v1>
group by 1, 2;

Teradata 有一个智能优化器,因此子查询不应影响查询计划。也就是说,它们让人们感到困惑(“ 这些子查询在做什么?”)。

有时,此类子查询会在查询的不同增量期间保留。例如,可能已经尝试在子查询中计算某些东西(比如行号)。最后,不需要了,但子查询仍然存在。

此外,性能可能取决于视图以及聚合需要多少数据。