一尘不染

SQL:排除性能比较(加入与未加入)

sql

我对查询sql的最有效方法感到好奇。例如,有2个表(tableA和tableB)可以在1列(col1)上连接。我想为colB在tableB中不存在的所有行显示tableA的数据。

(因此,换句话说,表B包含表A的col1的子集。我想显示表A而不包含表B中存在的数据)

假设tableB有100行,而tableA是巨大的(超过1M行)。我知道可以使用“不存在(不存在)”,但是也许有更有效的方法(较少的计算时间)来做到这一点。我可能没有外部联接吗?

代码片段和注释非常受赞赏。


阅读 143

收藏
2021-03-10

共1个答案

一尘不染

取决于RDBMS。对于Microsoft SQL Server ,OUTER JOIN首选NOT
EXISTS
,因为它可以使用更有效的Anti-Semi连接。

对于Oracle,Minus显然比NOT
EXISTS更合适(在适当的地方)

您将需要查看执行计划并做出决定。

2021-03-10