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。该列已编制索引,但不是聚簇索引。
编辑:我也对临时表开放同样的事情......虽然我的印象是临时表和表变量在性能方面几乎相同。
谢谢!
答案 0 :(得分:1)
在大多数情况下,第一种方法将获胜,因为表变量不使用统计信息。你会注意到大量数据导致性能下降。当你只有很少的价值时,就不应该有任何显着的差异。