Performance

14/01/2009 - 17:19 von Achim Ehlers | Report spam
Hallo Ng,

ich habe mal wieder màchtig Probleme mit der Geschwindigkeit einer Abfrage.
ich benötige eine Ansicht in folgender Art: (Sie dient als Datenquelle in
Excel)

select tab.S1
, tmp.S2
from tab left join
( Select sum(x) S2, S1
from tab2
group by S1
) as tmp on tab.S1 = tmp.S1

Dauert in meinem Fall > 1 Minute für 500 Datensàtze

Wenn ich das ganze so formuliere ist es deutlich schneller (2-3 Sekunden)
Select sum(x) S2, S1
into #tmp
from tab2
group by S1

select tab.S1
, tmp.S2
from tab left join
( select S2 from #tmp
) as tmp on tab.S1 = tmp.S1

das ist in einer View aber so nicht erlaubt.

wenn ich anstelle einer temporàren Tabelle eine weitere Ansicht definiere
ist es wieder genauso langsam wie die 1. Variante.

Was mache ich falsch?
bzw. wie muß ich den Select formulieren um die Performance der schnellen
Version in einer View zu erhalten?

Für Eure Tipps vorab schon mal vielen Dank

Gruß
Achim
 

Lesen sie die antworten

#1 Elmar Boye
15/01/2009 - 09:28 | Warnen spam
Hallo Achim,

Achim Ehlers schrieb:
ich habe mal wieder màchtig Probleme mit der Geschwindigkeit einer Abfrage.
ich benötige eine Ansicht in folgender Art: (Sie dient als Datenquelle in
Excel)

select tab.S1
, tmp.S2
from tab left join
( Select sum(x) S2, S1
from tab2
group by S1
) as tmp on tab.S1 = tmp.S1

Dauert in meinem Fall > 1 Minute für 500 Datensàtze



Schau mal nach Deinen Indizes.
Sowohl tab.S1 als auch tab2.S1 sollten einen Index haben.
Für Tab2 wàre - ab SQL Server 2005 - das einschließen
der zu summierenden Spalte 'x' ein zusàtzliches Plus,
siehe INCLUDE Klausel bei CREATE INDEX
<URL:http://msdn.microsoft.com/de-de/library/ms188783(SQL.90).aspx>

Gruß Elmar

Ähnliche fragen