完全披露,我会认为自己仍然在"初学者"编码阶段,所以请放轻松。我试图根据来自单独表格的条件更新一个非常大的表:
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));
问题是,由于每个表的大小(我认为),这需要大量的内存和时间才能完成。我正在寻找替代我尝试使用的方法。我已经研究了批量运行语句,因为它与我使用的小表一起工作得很好,但是我无法弄清楚如何使它工作。
如果需要,以下是用于创建更新的其他表:
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;
答案 0 :(得分:0)
Netezza
中的更新速度可能会很慢,尤其是在添加复杂性时。我有时会发现将更改记录移动到临时表更快,删除我要替换的记录,&amp;最后从临时表中移回记录。话虽如此。我认为以下更改将加快您尝试运行的更新。
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));
答案 1 :(得分:0)
我最终需要在每个基表的末尾添加一个'distribute on(customer)'语句。这样可以防止客户在我们的磁盘中随机存放效率低下,并将更新语句从几小时更改为秒。