我很好奇下面哪一个会更有效率?
我在使用IN
时总是有点谨慎,因为我相信SQL Server会把结果集变成一个大的IF
语句。对于较大的结果集,这可能导致较差的性能。对于较小的结果集,我不确定哪一个更可取。对于较大的结果集,EXISTS
不是更高效吗?
WHERE EXISTS (SELECT * FROM Base WHERE bx.BoxID = Base.BoxID AND [Rank] = 2)
与
WHERE bx.BoxID IN (SELECT BoxID FROM Base WHERE [Rank = 2])
发布于 2010-01-14 23:53:05
EXISTS
将更快,因为一旦引擎找到匹配,它将停止查找,因为该条件已被证明是真的。
使用IN
,它将在进一步处理之前收集子查询的所有结果。
发布于 2010-08-12 00:08:58
我在SQL Server2005和2008上做了一些测试,在EXISTS和IN上都得到了完全相同的实际执行计划,正如其他人所说的那样。优化器是最优的。:)
但是需要注意的是,如果您的查询措辞不正确,EXISTS、IN和JOIN有时会返回不同的结果:http://weblogs.sqlteam.com/mladenp/archive/2007/05/18/60210.aspx
发布于 2010-01-14 23:54:01
在这些情况下,执行计划通常是相同的,但除非您看到优化器是如何考虑索引等所有其他方面的因素,否则您将永远不会知道。
https://stackoverflow.com/questions/2065329
复制相似问题