SQL Server IN 与 = 查询中(对于一个值)

Sou*_*avA 6 sql-server optimization in-clause

首先,对于模糊的主题名称感到抱歉(我想不出更好的东西)。

一个 SO 答案让我思考当我放弃=IN 时是否真的会对性能产生影响。

select 1 id, 'abc' name into #a union 
select 2, 'abcd' union 
select 3, 'abcde' 

select * from #a where id = 1 ------ Query 1
select * from #a where id in (1)------ Query 2
Run Code Online (Sandbox Code Playgroud)

我检查了这两个查询的查询计划,发现它们对我来说是相同的(也许这个例子很简单,可能这就是原因)。

但是使用 时我是否违反了任何性能最佳实践IN?当然,这肯定会涉及一些开销,因为 anIN可以处理多个项目,甚至SELECTS. 我知道IN在功能方面提供了更多,但对于有多个记录的情况id = 1

select * from #a where id = (SELECT id from #a where id = 1)------ Query 3
select * from #a where id in (SELECT id from #a where id = 1)------ Query 4
Run Code Online (Sandbox Code Playgroud)

query3 会失败,而 query4 会工作。因此我想在我的代码=中用INin future 替换。但我想知道任何潜在的权衡。

编辑我只是有兴趣了解 SQL 引擎如何(不同地?)处理这些语句。

Rhy*_*nes 1

如果可以的话,请忽略您问题的性能方面,这里存在一个设计问题。您应该按照自己的意图进行编码,这样当其他人阅读您的代码时,他们就有更好的机会理解您想要实现的目标。您希望 SELECT id from #a where id = 1只返回一条记录吗?如果是这样,则使用“=”。如果您期望它返回零或更多,那么“=”将是错误的。