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)
如果您在 上有索引SomeNumberField,那么该语句将被分成索引上的两个范围扫描,或者作为TABLE SCAN / CLUSTERED INDEX SCAN带有过滤器的处理。
后者更有可能,前提是您的大多数行都有SomeNumberField = 999999
无论谓词中的常量顺序如何,范围扫描将始终按索引顺序执行IN。
与获取数据页所需的时间相比,过滤器比较时间可以忽略不计。
| 归档时间: |
|
| 查看次数: |
143 次 |
| 最近记录: |