Bei einem serverseitigen Cursor wird eine Art Resultset mit RowReferences und eigenen Locks erzeugt. Das anzulegen und jedesmal zu �berpr�fen dauert nat�rlich seine Zeit.
Serverseitige Cursor sind ein absolutes DON'T DO THIS, NEVER EVER! Es ist viel besser das auf ein Set von relationalen Operationen mit Hilfe von UDFs und SPs runterzubrechen! Gruss Peter > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf Of Andreas Roth > Sent: Monday, June 14, 2004 11:02 AM > To: [EMAIL PROTECTED] > Subject: [spam] AW: [Coffeehouse] cursor in Stored Procedure > > > > > 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 > _______________________________________________ Coffeehouse Mailingliste, Postings senden an: [EMAIL PROTECTED] An-/Abmeldung und Suchfunktion unter: http://www.glengamoi.com/mailman/listinfo/coffeehouse
