给定 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
谓词中的常量顺序如何。
与获取数据页所需的时间相比,过滤器比较时间可以忽略不计。
关于SQL Server 'In' 语句项性能顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2177970/