【发布时间】:2018-09-20 03:59:59
【问题描述】:
我有一个 SQL 查询(在 Teradata 平台上运行),它具有 1) 内连接 2)where子句 3) 分组
运行大约需要 40 分钟,我想让它更快。 (我没有权限为此表创建索引)。代码如下。我是否应该只使用 WHERE 子句和另一个中间表来创建一个中间表 W 来过滤掉与表 X 相交的 W 的行,然后最后进行内部连接?
create table ABC as
(select
b.acct_nb,
max(b.lst_pmt) as pmt
from
Y as b inner join X as a on
a.acct_nb = b.acct_nb
where b.amount > 0
group by b.acct_nb
);
建议代码:
create table W as
select acct_nb,amount
from Y
where amount > 0;
create table W2 as
select a.acct_nb,b.amount
from X as a inner join W as b
on a.acct_nb = b.acct_nb;
create table ABC as
select a.acct_nb,max(b.lst_pmt) as pmt
from W2 as a inner join Y as b
on a.acct_nb = b.acct_nb
group by b.acct_nb;
退出;
【问题讨论】:
-
您的
Create Table as Select语法无效。表和本地主键和外键的行数是多少?其中一张表中的acct_nb是唯一的吗?你能分享解释吗? -
这是现有代码中交给我的语法。我不是数据科学家,但这些查询需要大约 1 小时才能运行。我没有特权在这个特定的表上运行 EXPLAIN - 我相信它是一个根本无法修改的表。我通过SAS的PROC SQL访问SQL,数据库是Teradata。
-
关于行数:X 中大约 790 万行,Y 中未知,甚至更多,因为这是一个包含数十年信息的数据库。主键是 acct_nb。我也没有权限运行 EXPLAIN。
标签: sql performance teradata database-performance