> > Hallo > > In einer SP nutze ich Cursor um mehrere Inserts zu machen. > Jetzt habe ich ein ziemliches Performance-Problem. > > Den Cursor definiere ich wie folgt: > > DECLARE liste CURSOR FOR > SELECT ... > > Das Select besteht aus einem INNER JOIN in welcher eine Tabelle rund > 50'000 Eintr�ge enth�lt. Das Resultat aus dem Join enth�lt > aber nur noch > rund 250 Eintr�ge. > > So dauert ein FETCH auf die Liste rund 7,6 Sekunden. Wenn ich > im SELECT > ein TOP 500 mache (es werden also immer noch alle m�glichen Resultate > geliefert) dauert es noch rund 1,3 Sekunden. > > Was geschieht hier intern, damit es so viel schneller geht?
Das kann ich dir nicht sagen. Vielleicht weis da Peter n�heres. Aber es ist allgemein bekannt, das Cursor extrem unperformant sind. Oft kann man Sie aber umgehen und Set based (Wenige Abfragen, die immer mehrere Dinge auf einmal abhandeln) arbeiten. Das war ein Thema, auf das ich im weggek�rzten TSQL Teil meines SQL Vortrags bei der NCC eingehen wollte. Was zum Beispiel oft ganz gut funktioniert, ist, eine tempor�re Tabelle aufzubauen, in der man mit der Identity Funktion arbeitet (wenn es Beispielsweise um eine laufende Numerierung geht). Auf der sqlmag.com Webseite findet man einige Beispiele, wie man Aufgaben, die man eigentlich mit einem Cursor l�sen w�rde, auch Setbased hinbekommt. Dort haben Sie auch eine gute Suchfunktion. Gru�, Andreas > Wie kann ich das ganze Optimieren? Denn wenn ich nur das SELECT (ohne > TOP) im QueryAnalyzer ausgebe, dauert die ganze Abfrage und > ausgabe rund > 0,7 Sekunden. > > Gruss Christoph > _______________________________________________ > Coffeehouse Mailingliste, Postings senden an: > [EMAIL PROTECTED] > An-/Abmeldung und Suchfunktion unter: > http://www.glengamoi.com/mailman/listinfo/coffeehouse _______________________________________________ Coffeehouse Mailingliste, Postings senden an: [EMAIL PROTECTED] An-/Abmeldung und Suchfunktion unter: http://www.glengamoi.com/mailman/listinfo/coffeehouse
