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

标签 sql sql-server performance sql-server-2005 tsql

给定 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/

相关文章:

Python请求GET需要很长时间才能响应一些请求

Android:RunOnUiThread 与 AsyncTask

javascript - 使用数组搜索 Postgres 数组

mysql - 从 5 个连接表进行查询

mysql - 如果表存在则执行某些操作

sql - Oracle - REGEXP_LIKE 未给出所需结果

sql-server - 对 'UNION' 的查询执行 'ORDER BY'

sql - 在 SQL 外连接中,查询的哪一部分将表放在 "left"或 "right"上?

sql-server - 填充因子是如何物理分配的?

java - 在 JTable 中显示组件的最佳方式?