Sur mon MS SQL Server 2008, je l'ai créé une table temporaire comme ceci:demande très lent sur la table temporaire
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
Maintenant, la requête suivante pour toujours prendre
select A,SUM(B) from #test group by A -- takes 4 seconds to execute
alors que les demandes suivantes sont instantanés
select * from #test order by A
select SUM(B) from #test
Toutes les autres demandes (y compris les demandes énormes) qui n'utilisent pas les tables temporaires sont ru Bien que chaque demande utilisant une table temporaire semble rencontrer le même problème de performance. Ces demandes ont toutes couru habituellement vite hier, et je ne peux pas penser à quelque chose d'inhabituel qui aurait pu se produire depuis.
J'ai vérifié que mon tempdb n'a pas été complète à l'aide spaceused (70Mo libre de 85 MB)
J'ai aussi récupéré le plan d'exécution:
Quelle est la cause cette très mauvaise performance? Y a-t-il quelque chose que je devrais faire pour résoudre le problème?
Si vous définissez A comme clé primaire, il créera automatiquement un index cluster sur la table. C'est probablement votre meilleur pari. Il ne supprimera pas seulement le tri, mais il remplacera votre scan de table par un scan en cluster (et améliorera considérablement les performances). –