如何解决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非常大-像十亿行和数千列。但是我们只选择了少数列。那么执行“选择*”效率低下吗?
如果仅指定我们需要的列而不是“ 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具有智能优化器,因此子查询不应影响查询计划。就是说,它们使人们感到困惑(“这些子查询在做什么 ?”)。
有时,在查询的不同增量期间会保留此类子查询。例如,可能已尝试在子查询中计算某些内容(例如,行号)。最后,不需要这样做,但是子查询仍然存在。
此外,性能可能取决于视图以及聚合所需的数据量。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。