SNOWFLAKESQL找到2个大表之间的行差异

问题描述 投票:0回答:1
我有2个桌子,每个桌子约300m行

CREATE TABLE AllIDs ( ID int NULL, isUsed BOOLEAN NULL ) CREATE TABLE UsedIDs ( ID int NULL )

我想找到所有未使用的ID,也就是说,Allids中未出现在underIDS
中的所有ID行 我尝试了以下和一些类似的变体,但是即使使用中等仓库,查询也无限期地运行(16多个小时)。

UPDATE AllIDs t SET t.IsUsed = 0 from AllIDs where not exists (select 1 FROM UsedIDs f WHERE t.ID = f.ID )

任何想法如何有效地完成?

我认为,更新声明中的

from

子句是不必要的,并导致一个更复杂的查询计划,包括不必要的笛卡尔加入。
sql snowflake-cloud-data-platform
1个回答
0
投票

UPDATE allids t SET t.isused = 0 WHERE NOT EXISTS ( SELECT 1 FROM usedids f WHERE t.id = f.id )

    

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.