我有兩個表:我應該使用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我只是從你以前的回答中尋找這個鏈接。幸運的我,你碰巧落入。 –