我有两个表:我应该使用EXISTS或IN
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)
编辑:评论中提出了第三个选项。我并没有考虑加入,因为我不从酒吧
SELECT * FROM Foo as F
JOIN Bar as B on B.Baz = F.Baz
但是看着两个查询我无法看出其中的区别执行计划后需要任何列。这些查询是否真的相同? 哪个查询更好?
在决定EXISTS
和IN
之间时应该考虑什么。我想知道SQL Server是否足够聪明,可以执行一次嵌套查询并存储结果以进行比较,还是执行每行的嵌套查询?
'SELECT Foo。* FROM Foo JOIN Bar on Bar.Baz = Foo.Baz'? –
我会使用'EXISTS'但不是出于性能原因,请阅读:[我应该使用NOT IN,OUTER APPLY,LEFT OUTER JOIN,EXCEPT还是NOT EXISTS?](http://www.sqlperformance.com/2012/ 12/t-sql-queries/left-anti-semi-join)我认为'EXISTS/IN'也是如此。 –
@TimSchmelter我只是从你以前的回答中寻找这个链接。幸运的我,你碰巧落入。 –