Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server';在';与';小于';_Sql_Sql Server - Fatal编程技术网

SQL Server';在';与';小于';

SQL Server';在';与';小于';,sql,sql-server,Sql,Sql Server,我有一个我正在复制的地址表。有14种不同类型的地址可用。为了减少复制的数据,我在AddressType字段上进行筛选。该字段为int,其值为1到14。我最初有一个过滤器 AddressType = 2 AddressType < 3 ,因为我只对那种类型的地址感兴趣。但是,最近的一项更改要求我同时复制了AddressType 1和AddressType 2。我先把过滤器换成了 AddressType in (1,2) 如果有一个过滤器,我会过得更好吗 AddressType = 2

我有一个我正在复制的地址表。有14种不同类型的地址可用。为了减少复制的数据,我在AddressType字段上进行筛选。该字段为int,其值为1到14。我最初有一个过滤器

AddressType = 2
AddressType < 3
,因为我只对那种类型的地址感兴趣。但是,最近的一项更改要求我同时复制了AddressType 1和AddressType 2。我先把过滤器换成了

AddressType in (1,2)
如果有一个过滤器,我会过得更好吗

AddressType = 2
AddressType < 3
AddressType<3

想法

当数字变大时,可能会有显著差异。在较小的数字上,您不会看到性能差异,但当它变大时,您会看到性能差异,特别是在AddressType上有索引的情况下。您的
IN()
版本基本上被转换为:

WHERE AddressType = 1
   OR AddressType = 2
   OR ...
我同意其他人对这个具体案例的看法。(1) 只有14个值时,性能差异不太可能明显。(2) Jonathan的观点是,
IN()
更准确地反映了您想要做的事情,这也是一个很好的观点


但对于可能有更多可能值的未来读者,我认为重要的是要注意,当列表不受限制时(或者当执行计划看起来完全相同时),情况会发生怎样的变化。我倾向于说,如果您需要添加另一个地址类型,如“5”,您应该使用这将迫使您重写当您的需求发生变化并且需要类型1、2、9和14时,IN公式会更好。列表比较更准确地反映您正在做的事情(从可能值的小列表中选择两种类型)

“小于”符号恰好起作用,但巧合的是,类型的表示容易受到这样的范围比较的影响


就性能而言,在这两者之间基本上没有什么可选择的。小于的操作可能会稍微快一点,但幅度不太可能是可测量的。

所有答案都很好……与其他海报一样……可能会产生不同的是“你还可以做些什么”

在任何比较中总是考虑NULL。您的查询是写的好WRT NULL,但是:如果空值是可能的……并且如果您决定改变或重用SQL ad hoc,说,否定它……您可能会有一个比较的问题,而不是在.

中。 例如,在(1,2)中如何执行vs>=3…或我们可能使用的任何化身。NULL在第一个中为TRUE,但在第二个中为FALSE。(NULL是比较)


考虑空值就像呼吸SQL创建一样。

这无关紧要,选择最容易键入的类型。只有当您有数百个输入和处理类型时,这才开始起作用。如果您查看执行计划,就会发现有一点不同。同意这并不真的重要。查看第二个可能有slig的原因但是它的优点是。
NULL
与任何比较都不匹配,除了
是NULL
。你说
NULL不在(1,2)
中是真的,事实上是假的。我考虑过这一点。但是将<3改为(1,2,3)并不需要太多输入。