是否有任何差异(性别)写入此请求:
Select * from T where PK = 1
或者
Select * from T where PK in (1)
我相信不是,但我真的不知道如何发布应该表达我的感情的执行计划。
提前谢谢
答案 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子句找到一系列数字。