我有两张桌子:
Foo
有 24.000.000 行Bar
16行
我正在考虑重写查询
SELECT * FROM Foo as F
WHERE EXISTS (SELECT 1 FROM Bar as B WHERE B.Baz = F.Baz)
有了这个
SELECT * FROM Foo
WHERE Baz IN (SELECT Baz FROM Bar)
编辑:评论中建议了第三个选项。我没有考虑加入,因为我不需要来自 Bar 的任何专栏
SELECT * FROM Foo as F
JOIN Bar as B on B.Baz = F.Baz
但是在查看了这两个查询的执行计划之后,我无法发现其中的区别。这些查询真的等效吗? 哪个查询更好?
EXISTS
在和之间做决定时我应该考虑什么IN
。我想知道 SQL Server 是否足够聪明,可以执行一次嵌套查询并存储结果以进行比较,还是对每一行执行嵌套查询?