繁体   English   中英

这个 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 非常大 - 像十亿行和数千列。 但我们只选择了少数几列。 那么做一个“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 具有智能优化器,因此子查询不应影响查询计划。 也就是说,它们让人们感到困惑(“这些子查询在做什么?”)。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM