【发布时间】:2013-04-14 15:13:03
【问题描述】:
我最近写了一个有这部分的存储过程
select T.Id from Teams T
inner join
(
select SG.Team1Id, SG.Team2Id from SG
union all
select SP.Team1Id, SP.Team2Id from SP
) G
on T.Id in (G.Team1Id, G.Team2Id)
我怀疑这个查询效率
此查询是否会从子查询中的SG 和SP 中获取所有记录,然后应用连接条件?如果是,那么我认为这不是有效的
或
Sql server 足够聪明,只能从两个表中获取符合连接条件的行?
【问题讨论】:
-
发布查询计划,以便我们了解引擎将如何执行此查询。
-
on T.Id in (G.Team1Id, G.Team2Id)意味着您将始终获得嵌套循环连接。它是T.Id = G.Team1Id or T.Id = G.Team2Id。见Is having an 'OR' in an INNER JOIN condition a bad idea?
标签: sql sql-server-2008