临时表上的请求非常慢

时间:2010-10-29 15:47:15

标签: sql performance sql-server-2008

在我的MS SQL Server 2008上,我创建了一个这样的临时表:

create table #test
(
A varchar(50),
B int,
)

insert into #test select 'a',45
insert into #test select 'b',587
insert into #test select 'a',4
insert into #test select 'b',58

现在,以下请求将永远存在

select A,SUM(B) from #test group by A -- takes 4 seconds to execute

而以下请求是即时的

select * from #test order by A
select SUM(B) from #test

不使用临时表的所有其他请求(包括巨大请求)运行正常,而使用临时表的每个请求似乎都会遇到相同的性能问题。这些请求昨天通常都很快,我想不出任何可能发生的异常事件。

我已经检查过我的tempdb没有使用spaceused(从85 MB中释放70MB)

我还检索了执行计划:

alt text

什么可能导致这种非常糟糕的表现?我有什么办法解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

您最好的选择可能是在A上添加索引或将A设置为表格的主键。

答案 1 :(得分:2)

中间排序很昂贵+您可以在查询计划中看到感叹号,可能缺少统计信息

如果您添加索引(或主键),它将运行得更快,因为数据将“预先排序”并且您将获得有关它的统计信息