鉴于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
谓词中的常量顺序如何。
与获取数据页所需的时间相比,过滤器比较时间可以忽略不计。