【发布时间】:2011-01-05 03:19:46
【问题描述】:
我很好奇以下哪种方法更有效?
我一直对使用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])
【问题讨论】:
-
找出答案的最佳方法是尝试一下并进行一些测量。
-
有得到要为此做无数次重复......
-
@marc_s:是的,但我认为这确实取决于大小写。我想规范的答案是 klausbyskov 的(或任何可以声称现有技术的人)。
-
仅供参考,如果您想要最性能的方式,您可以在您的
where exists中使用select 1 from Base...,因为您实际上并不关心结果,只是一个行实际存在。 -
@brad 不是。编译器将忽略
select和from之间的任何内容(除非您在其中放置另一个子查询或类似的东西......奇怪)。 IMO,语法应该是semi join table2 on ....。
标签: sql-server sql-server-2005 exists query-performance sql-in