![]() |
1
2
不管它是否短路,如果索引是查询的唯一部分,那么SQLServer应该能够使用索引。如果变量为NULL,那么您可能不希望SQLServer使用索引,因为它将毫无用处。 如果您在一个存储过程中,那么最好对查询使用OPTION(重新编译)。这将导致SQLServer每次都创建一个新的查询计划。这是一点开销,但收益通常会远远超过这一点。这仅适用于SQL2008,甚至仅适用于某些更高版本的service Pack。在重新编译之前有一个bug使它变得无用。有关更多信息,请查看厄兰索马斯科格的 great article 关于这个问题。具体来说,您需要查看静态SQL部分。 |
![]() |
2
1
为了澄清一点,SQL并不像我们在基于C的语言中所知道的那样有短路。看起来像短路的实际上是在SQLServer三元逻辑中,TRUE或NULL的计算结果为TRUE
如:
|
![]() |
John D · 需要为NULL或NOT NULL的WHERE子句 4 月前 |
![]() |
Marc Guillot · 记录值时忽略冲突 5 月前 |
![]() |
Fachry Dzaky · 正确使用ROW_NUMBER 5 月前 |
![]() |
TriumphTruth · 从满足特定条件的数据集中选择1行 5 月前 |