SQL - IN子句vs小列表的等号运算符



哪种方式更有效?

where @TeamId in (Team1Id, Team2Id)

where @TeamId=Team1Id or @TeamId=Team2Id

我正在使用sql server 2008.

编辑

当我检查执行计划时,两个查询都显示它们使用索引和相同的执行计划。

两者相同SQL server转换

where @TeamId in (Team1Id, Team2Id)

where @TeamId=Team1Id or @TeamId=Team2Id

写IN比写OR更容易读。

对于您提供的测试变量的特定示例,IN只是多个OR的语法糖。

但是,在选择关系的行的相关情况下,使用到另一个关系的连接是更好的,特别是当被比较的数据字段被索引或比较值列表增长时。这样的比较关系很容易使用如下静态子查询创建:

select *
from data
join (
  select Team1Id as TeamId union all
  select Team2Id 
) comparison on comparison.TeamId = data.TeamId

这种静态子查询技术广泛适用于许多情况。

最新更新