在我的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)
我还检索了执行计划:
什么可能导致这种非常糟糕的表现?我有什么办法解决这个问题吗?
答案 0 :(得分:4)
您最好的选择可能是在A上添加索引或将A设置为表格的主键。
答案 1 :(得分:2)
中间排序很昂贵+您可以在查询计划中看到感叹号,可能缺少统计信息
如果您添加索引(或主键),它将运行得更快,因为数据将“预先排序”并且您将获得有关它的统计信息