Очень медленный запрос на временную таблицу - PullRequest
0 голосов
/ 29 октября 2010

На моем 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 не была заполнена с использованием пробела (70 МБ свободно из 85 МБ)

Я также получил план выполнения:

alt text

Что может привести к такой очень низкой производительности?Есть ли что-то, что я должен решить проблему?

Ответы [ 2 ]

4 голосов
/ 29 октября 2010

Лучше всего, вероятно, добавить индекс А или установить А в качестве первичного ключа таблицы.

2 голосов
/ 29 октября 2010

Промежуточная сортировка стоит дорого + вы можете увидеть восклицательный знак в плане запроса, возможно, отсутствует статистика

Если вы добавите индекс (или первичный ключ), он будет работать быстрее, потому что данные будут «предварительно отсортированы» и у вас будет статистика по ним

...