雪花内连接在左连接上的性能较差

时间:2020-08-16 08:19:26

标签: sql snowflake-cloud-data-platform

我在Snowflake中有2个等效查询-一个具有左联接,另一个具有内部联接:

SELECT * 
FROM A 
INNER JOIN B ON a.id=b.id;

SELECT * 
FROM A
LEFT JOIN B ON a.id=b.id
WHERE b.id IS NOT NULL;

一个小时后,内部联接不会完成,而左侧联接只需要几秒钟。为什么会发生?

编辑: Inner join

Left join

1 个答案:

答案 0 :(得分:0)

有两种可能性。

一个问题是查询之间的性能确实存在差异。发生这种情况是因为Snowflake为两个查询选择了非常不同的执行计划。当然,查询并不相同,但是我可能希望执行计划会相似。您可以检查explain对此进行调查。

第二个是查询实际上具有非常相似的性能,但是您很快就会看到第一个查询的结果。为什么?因为第一个表中的每一行都将在结果集中-即使没有匹配项。相反,如果两个表之间根本不存在匹配项,则第二个查询必须先处理所有 all 数据,然后才能知道不存在匹配项。