这个 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 有一个智能优化器,因此子查询不应影响查询计划。也就是说,它们让人们感到困惑(“ 这些子查询在做什么?”)。
有时,此类子查询会在查询的不同增量期间保留。例如,可能已经尝试在子查询中计算某些东西(比如行号)。最后,不需要了,但子查询仍然存在。
此外,性能可能取决于视图以及聚合需要多少数据。
我的经理在 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 有一个智能优化器,因此子查询不应影响查询计划。也就是说,它们让人们感到困惑(“ 这些子查询在做什么?”)。
有时,此类子查询会在查询的不同增量期间保留。例如,可能已经尝试在子查询中计算某些东西(比如行号)。最后,不需要了,但子查询仍然存在。
此外,性能可能取决于视图以及聚合需要多少数据。