SQL Server'In'语句项目顺序性能

Jam*_*man 6 sql t-sql sql-server performance sql-server-2005

鉴于SQL语句:

SELECT * 
FROM MY_TABLE
WHERE SomeNumberField in (0,99999)
Run Code Online (Sandbox Code Playgroud)

如果我可以保证大多数行MY_TABLE已经SomeNumberField设置为99999,并且可以预测这将保持不确定的情况,那么编写上述查询是否更好:

SELECT * 
FROM MY_TABLE
WHERE SomeNumberField in (99999,0)
Run Code Online (Sandbox Code Playgroud)

Qua*_*noi 4

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

后者更有可能,前提是您的大多数行都有SomeNumberField = 999999

无论谓词中的常量顺序如何,范围扫描将始终按索引顺序执行IN

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