【发布时间】:2015-03-21 12:09:44
【问题描述】:
首先,抱歉主题名称含糊(我想不出更好的)。
一个 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
我检查了这两个查询的查询计划,并发现它们对我来说是相同的(也许这个示例过于简单,可能这就是原因)。
但是我在使用IN 时是否违反了任何性能最佳实践?当然,这其中肯定会有一些开销,因为IN 可以处理多个项目,甚至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
query3 会失败,而 query4 会工作。因此,我希望将来在我的代码中用IN 替换=。但我想知道任何潜在权衡。
编辑 我只是想了解 SQL 引擎如何(以不同的方式?)处理这些语句。
【问题讨论】:
-
通常你会用一个连接重写查询 3 和 4,所以你不需要 IN 或 =。
-
只是一个例子:)
-
"=" 运算符会比“IN”快。如果你想检查使用 SET STATISTIC TIME IO ON
-
为什么是我想知道的。
标签: sql-server optimization in-clause