'='和In之间有区别吗?

Pit*_*ded 6 sql sql-server

是否有任何差异(性别)写入此请求:

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提前

Dam*_*ver 3

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 个值(而且我懒得输入更多值)。