Sql Server性能:表变量内连接与where子句中的多个条件

时间:2015-03-17 13:02:53

标签: sql-server database performance tsql database-performance

MS Sql Server中有什么更快,具有多个条件的where子句或创建表变量后的内连接?例如:

select A.* from A where A.fk='one  ' or A.fk='two  ' or A.fk='three' ...ect.

VS

declare @temp (key as char(matchingWidth)) table;
insert into @temp values ('one  ');
insert into @temp values ('two  ');
insert into @temp values ('three');
select A.* from A inner join @temp t on A.fk=t.key;

我通常知道差异可以忽略不计;但遗憾的是,我查询的数据库使用char类型作为主键......

如果有帮助,在我的特定情况下,表A有几百万条记录,通常会有大约一百个我要查询的ID。该列已编制索引,但不是聚簇索引。

编辑:我也对临时表开放同样的事情......虽然我的印象是临时表和表变量在性能方面几乎相同。

谢谢!

1 个答案:

答案 0 :(得分:1)

在大多数情况下,第一种方法将获胜,因为表变量不使用统计信息。你会注意到大量数据导致性能下降。当你只有很少的价值时,就不应该有任何显着的差异。