我不认为在性能上有显着差异。如果您查看执行计划,SQL Server 会在数据加载步骤中嵌入过滤。当从磁盘读取数据并将其加载到磁盘页面中时,就会发生这种情况。与变幻莫测的 I/O 相比,花费几个周期使一个比另一个更快基本上没有影响。
“in”运算符的一个典型实现是作为一个小哈希表。对于三个元素,这很容易比顺序比较慢。但是,对于更多比较,“in”方法会更快。对于数字来说尤其如此,因为内置硬件比较会非常快。不过,还要记住,编译器知道“in”列表中的内容,因此如果数据库设计人员认为这是值得优化的,它可以选择进行顺序比较。不过,我怀疑他们会这么想。
回应亚伦的评论。我的信念是基于 IN 可以返回的两个错误:
错误 8623:查询处理器用尽内部资源,无法生成查询计划。这是一个罕见的事件,仅适用于极其复杂的查询或引用大量表或分区的查询。请简化查询。如果您认为自己错误地收到了此消息,请联系客户支持服务以获取更多信息。
错误 8632:内部错误:已达到表达式服务限制。请在您的查询中寻找可能复杂的表达式,并尝试简化它们。
(http://msdn.microsoft.com/en-us/library/ms177682.aspx)
我不熟悉关于 WHERE 子句的逻辑表述的这些错误。因此,我做出了一个可能轻率的假设,即底层实现是使用哈希表。