是否有任何差异(性别)写入此请求:
Select * from T where PK = 1
Run Code Online (Sandbox Code Playgroud)
或这个
Select * from T where PK in (1)
Run Code Online (Sandbox Code Playgroud)
我不相信,但我真的不知道如何发布一个应该表达我的感觉的执行计划.
Thx提前
IN 表达式:
Column in (Val1,Val2,Val3)
Run Code Online (Sandbox Code Playgroud)
在内部重写为非常类似于以下内容的内容:
(Column = Val1 or Column = Val2 or Column = Val3)
Run Code Online (Sandbox Code Playgroud)
您可以看出这一点,因为如果您提供不存在的列的名称,则报告的错误数 ( Invalid Column name 'Blah'
) 等于 IN 列表中的值数。当然,这种重写仅发生在文字值列表中。子查询(如 @oezi 所说)的处理方式不同。
当然,这种特定的优化没有记录在案,并且最好编写尽可能清晰的代码。
我不确定是否存在不执行此扩展的上限 - 它肯定会执行 IN 列表中最多 100 个值(而且我懒得输入更多值)。