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

时间:2011-01-05 10:00:46

标签: sql sql-server

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

Select * from T where PK = 1

或者

Select * from T where PK in (1)

我相信不是,但我真的不知道如何发布应该表达我的感情的执行计划。

提前谢谢

3 个答案:

答案 0 :(得分:3)

在你的情况下:没有区别

一般情况下:您可以编写子选择或大括号内部,如果该子选择返回多于1行,=将失败。另外,你可以写(1,2)(这将是一个返回2行的子选择),其中=也是不可能的。

答案 1 :(得分:3)

IN表达式:

Column in (Val1,Val2,Val3)

内部重写为非常类似于:

的内容
(Column = Val1 or Column = Val2 or Column = Val3)

您可以这样说,因为如果您提供不存在列的名称,则报告的错误数(Invalid Column name 'Blah')等于IN列表中的值数。当然,这种重写只发生在文字值列表中。子查询(如@oezi所说)的处理方式不同。


当然,这个特殊的优化没有记录,最好尽可能写出最清晰的代码。

我不确定是否有一个上限,它不会执行此扩展 - 它肯定会在IN列表中达到100个值(我不能打扰输入更多)。

答案 2 :(得分:-1)

比较两个值是否相等的比较运算符是进行比较的最快方法。

“从T中选择*,其中PK = 1”

将比预先快得多:

“从T中选择*,其中PK为(1)”

与:

相同

“SELECT customer_number,customer_name FROM customer WHERE customer_number BETWEEN 1000和1004”

将比预先快得多:

“SELECT customer_number,customer_name FROM customer WHERE customer_number in(1000,1001,1002,1003,1004)”

查询优化器可以更快地找到一系列数字(使用BETWEEN),而不是使用IN子句找到一系列数字。