我在Netezza有兩個表。表A有〜70B記錄,表B有〜15K記錄。刪除需要發生在表A上,但我必須加入2列。我的查詢看起來是這樣的Netezza刪除使用JOIN
從A中刪除(a.col1,a.col2)in(選擇col1,col2 from B)。
我看到計劃是非常昂貴的,尋找替代方法。 netezza是否支持JOIN ON DELETE?有沒有人有任何其他方法?
我在Netezza有兩個表。表A有〜70B記錄,表B有〜15K記錄。刪除需要發生在表A上,但我必須加入2列。我的查詢看起來是這樣的Netezza刪除使用JOIN
從A中刪除(a.col1,a.col2)in(選擇col1,col2 from B)。
我看到計劃是非常昂貴的,尋找替代方法。 netezza是否支持JOIN ON DELETE?有沒有人有任何其他方法?
可以使用rowid
實現你在找什麼:
delete from table_A
where rowid in (select a.rowid
from table_A a inner join
table_B b
on a.col1=b.col1
and a.col2=b.col2)
另一種方法是使用CTAS沒有記錄創建一個表,並重新命名它。我相信所發生的費用會少這裏 。
create table T1 as select
col1,col2 from A where (col1,col2)
not in (select col1,col2 from B);
drop table A;
alter table T1 rename to A;
您還可以使用EXISTS()作爲替代語法:
delete from table_A a
where exists(select 1 from table_b b
where b.col1=a.col1
and b.col2=a.col2
)
編輯: 這樣做的開銷是相當低的,因爲它沒有建立連接或收集什麼東西,它只需要檢查記錄是否存在。
我現在看到差異化方向的計劃;探索「存在」選項。 – user3373474