--构造表tb1测试数据
create table tb1(ID int identity(1,1),C1 varchar(10),C2 int)
declare @C1 varchar(10),@C2 int
set @C1=1
while(@C1<=100)
begin
set @C2=1
while(@C2<=20)
begin
Insert into tb1(C1,C2) values('A'+@C1,@C2)
set @C2+=1
end
set @C1+=1
end
--构造表tb2测试数据
create table tb2(ID int identity(1,1),C1 int,C2 int)
declare @C1 int,@C2 int
set @C1=0
while(@C1<=999)
begin
set @C2=1
while(@C2<=45)
begin
Insert into tb2(C1,C2) values(@C1,@C2)
set @C2+=1
end
set @C1+=1
end
set statistics time on
--查询Sql
select t1.C1,t2.C1,COUNT(*) from tb1 t1,tb2 t2
where t1.C2=t2.C2
group by t1.C1,t2.C1
说明:
tb1,tb2是经过简化后的表,本段查询Sql实际用在循环中。我查询耗时800多毫秒,循环起来就很不乐观了。执行计划显示主要开销:哈希匹配(开销70%)、并行度(开销20%),我希望能将查询耗时减少到200毫秒以内。哈希匹配是什么鬼东西,可以不用它吗?这个问题困扰我很久了,一直没有明显的改善,哪位朋友能不吝赐教?谢谢!
CREATE INDEX ix_tb2_c2_c1 ON tb2(c2,c1)
加索引之后可以快一点,但快不了多少。
应该是最终输出的结果集大导致效率不高, 毕竟你都没过滤;