netezza 更新语句需要很长时间和大量资源,需要替代
netezza update statement taking very long time and high resources, need alternative
完全公开,我认为自己仍处于编码的 "beginner" 阶段,所以请放轻松。我正在尝试根据来自单独 table 的条件更新非常大的 table,如下所示:
UPDATE table1 A
SET A.flag1 = 'RE' WHERE EXISTS
(SELECT B.CUSTOMER FROM ALL_CUST B
WHERE A.CUSTOMER = B.CUSTOMER
AND B.DAY < (A.DAY - 365));
问题是,由于每个 table(我认为)的大小,这需要大量内存和时间才能完成。我正在寻找我尝试使用的方法的替代方法。我已经研究了 batch 运行 声明,因为它与我一起工作的较小的 tables 可以很好地工作,但我不太清楚如何让它工作。
如果需要,这里是用于创建更新的其他 table:
CREATE table table1 AS
SELECT CUSTOMER,
DAY,
'NW' AS FLAG1,
'NW' AS flag2
FROM database
WHERE CUSTOMER > -1
and othercriteria
GROUP BY CUSTOMER,
Day;
CREATE table all_cust AS
SELECT CUSTOMER,
DAY,
FROM database
WHERE CUSTOMER > -1
and othercriteria
GROUP BY CUSTOMER,
Day;
Netezza
中的更新速度可能会很慢,尤其是随着复杂性的增加。有时我发现将更改记录移动到临时 table、删除我要替换的记录并最终将记录从临时 table 移回会更快。话虽如此。我认为以下更改将加快您尝试 运行.
的更新
UPDATE table1
SET flag1 = 'RE'
where rowid in
(SELECT distinct A.rowid
FROM ALL_CUST B inner join
table1 A
on A.CUSTOMER = B.CUSTOMER
AND B.DAY < (A.DAY - 365));
我最终需要在每个基表的末尾添加一个 'distribute on (customer)' 语句。这避免了客户被随机安置在我们磁盘上的低效率,并将更新语句从小时更改为秒。
完全公开,我认为自己仍处于编码的 "beginner" 阶段,所以请放轻松。我正在尝试根据来自单独 table 的条件更新非常大的 table,如下所示:
UPDATE table1 A
SET A.flag1 = 'RE' WHERE EXISTS
(SELECT B.CUSTOMER FROM ALL_CUST B
WHERE A.CUSTOMER = B.CUSTOMER
AND B.DAY < (A.DAY - 365));
问题是,由于每个 table(我认为)的大小,这需要大量内存和时间才能完成。我正在寻找我尝试使用的方法的替代方法。我已经研究了 batch 运行 声明,因为它与我一起工作的较小的 tables 可以很好地工作,但我不太清楚如何让它工作。
如果需要,这里是用于创建更新的其他 table:
CREATE table table1 AS
SELECT CUSTOMER,
DAY,
'NW' AS FLAG1,
'NW' AS flag2
FROM database
WHERE CUSTOMER > -1
and othercriteria
GROUP BY CUSTOMER,
Day;
CREATE table all_cust AS
SELECT CUSTOMER,
DAY,
FROM database
WHERE CUSTOMER > -1
and othercriteria
GROUP BY CUSTOMER,
Day;
Netezza
中的更新速度可能会很慢,尤其是随着复杂性的增加。有时我发现将更改记录移动到临时 table、删除我要替换的记录并最终将记录从临时 table 移回会更快。话虽如此。我认为以下更改将加快您尝试 运行.
UPDATE table1
SET flag1 = 'RE'
where rowid in
(SELECT distinct A.rowid
FROM ALL_CUST B inner join
table1 A
on A.CUSTOMER = B.CUSTOMER
AND B.DAY < (A.DAY - 365));
我最终需要在每个基表的末尾添加一个 'distribute on (customer)' 语句。这避免了客户被随机安置在我们磁盘上的低效率,并将更新语句从小时更改为秒。