鉴于SQL语句:

SELECT *
FROM MY_TABLE
WHERE SomeNumberField in (0,99999)


如果我可以保证MY_TABLE中的大多数行的SomeNumberField设置为99999,并且可以预测这种情况将不确定地保持不变,那么最好编写上述查询,如下所示:

SELECT *
FROM MY_TABLE
WHERE SomeNumberField in (99999,0)

最佳答案

如果您在SomeNumberField上具有索引,则该语句将被分为两个对索引的范围扫描,或者使用过滤器作为TABLE SCAN / CLUSTERED INDEX SCAN处理。

如果您的大多数行都具有SomeNumberField = 999999,则后者更有可能

范围扫描将始终以索引顺序执行,而不管IN谓词中的常量顺序如何。

与获取数据页所需的时间相比,过滤器比较时间可以忽略不计。

08-24 18:15