SQL Server'In'与'less'相比

Jef*_*ddy 2 sql sql-server

我有一张我正在复制的地址表.有14种不同类型的地址可供使用.为了减少复制的数据,我在AddressType字段上进行过滤.该字段是一个int,其值为1到14.我原来有一个过滤器

AddressType = 2
Run Code Online (Sandbox Code Playgroud)

因为我只对那种类型的地址感兴趣.但是,最近的更改要求我同时复制AddressType 1和2.我首先将过滤器更改为

AddressType in (1,2)
Run Code Online (Sandbox Code Playgroud)

我会用过滤器更好吗?

AddressType < 3
Run Code Online (Sandbox Code Playgroud)

思考?

Aar*_*and 5

随着数量变大,可能会有显着差异.您不会在较小的数字上看到性能差异,但随着它变大,您会看到差异,特别是如果AddressType上有索引.您的IN ()版本基本上被翻译为:

WHERE AddressType = 1
   OR AddressType = 2
   OR ...
Run Code Online (Sandbox Code Playgroud)

对于这个具体案例,我同意其他人的意见.(1)当只有14个值时的性能差异不太可能引人注意.(2)乔纳森的观点是,IN ()更准确地反映出你想做的事情也是一个好的.

但是,对于未来的读者谁可能有更多的可能值,我觉得要注意的事情是如何是很重要的可以改变时,列表中没有这样的限制(或当<IN ()不再提供相同的功能,例如,当地址类型的变化).即使在IN ()列表中的所有内容都符合范围标准的便利性的情况下,更大的尺寸仍然需要考虑其他事项:(1)键入不太方便IN (1,2,3,4,5,6,7,8,9,10, ...),这也可能导致批量大得多的时候我们'谈论极端.