在连接中使用临时表来解决性能问题

时间:2014-10-22 11:20:57

标签: sql sql-server join

在以下两个查询之间,性能和输出方面是否有任何基本差异?

select * from table1 
left outer join table2 on table1.col=table2.col
  and table2.col1='shhjs'

select * into #temp from table2 where table2.col1='shhjs'

select * from table1 left outer join #temp on table1.col=#temp.col

这里table2有大量的记录,而#temp的数量较少。

1 个答案:

答案 0 :(得分:0)

是的,有。第二种方法是在临时数据库中实现一个表,这需要额外的开销。

第一种方法不需要这样的开销。而且,它可以更好地优化。例如,如果table2(col, col1)上存在索引,则第一个版本可能会利用它。第二个不会。

但是,您始终可以使用您的数据在系统上尝试两个查询,并确定一个查询是否明显优于另一个。