2008-09-26 7 views
20

Ist es eine gute Idee, While-Schleife anstelle eines Cursors zu verwenden? Was sind die Vorteile/Nachteile von Cursorn?Cursor verus while loop - was sind die Vorteile/Nachteile von Cursors?

+0

Meinst du eine while-Schleife im clientseitigen Code? Können Sie ein Beispiel geben? – Kev

+0

Ich stimme Kev, können Sie näher erläutern, was Sie erreichen möchten? –

+2

Ich denke, der Autor der Frage bedeutet, dass Sie eine Schleife simulieren können, indem Sie die zu schleifenden Elemente in eine temporäre Tabelle einfügen. Sie können dann mit einer WHILE Count (1) <> 0-Schleife die Elemente "durchlaufen". In jeder Schleife verarbeiten Sie ein Element und entfernen es aus der temporären Tabelle. WHERE Schleife gegen CURSOR ist also eine gute Frage in Bezug auf Leistung und andere Vor-/Nachteile. – redcalx

Antwort

9

Einige davon auf dem DBMS abhängig ist, aber in der Regel:

Pro:

  • Outperform Schlaufen, wenn es um Zeile-für-Zeile-Verarbeitung kommt

  • Arbeiten recht gut mit großen Datensätzen

Nachteile:

  • Sie auf nicht so gut

  • Verwenden mehr Server-Ressourcen

  • Erhöht laden maßstabs Tempdb

  • Kann bei unsachgemäßer Verwendung (z. Öffnen Sie ohne entsprechende Schließen)

0

Einige Nachteile der Cursor sind here

Dann gibt es auch this (Eigentlich ein sehr interessantes Problem genannt - "Halloween-Problem")

1

Ich würde Sie fragen, was Sie mit diesem Cursor/While-Schleife tun.

Wenn Sie Daten aktualisieren oder zurückgeben, verwenden Sie keine geeignete WHERE-Klausel. Ich kenne Leute, die sagen, dass du niemals Cursor benutzen sollst.

10

Ich folge diesem guten Rat:

[...], was besser ist: Cursor oder WHILE-Schleifen? Auch hier kommt es wirklich auf Ihre Situation an. Ich verwende fast immer einen Cursor, um Datensätze durchzulaufen, wenn erforderlich ist. Das Cursorformat ist ein etwas intuitiver für mich und, da ich gerade die Konstrukte zu Schleife durch den Ergebnissatz einmal verwenden, macht es Sinn, den FAST_FORWARD Cursor zu verwenden. Denken Sie daran, dass der von Ihnen verwendete Cursor einen großen Einfluss auf die Leistung Ihres Loopings hat.

— Tim Chapman in Comparing cursor vs. WHILE loop performance in SQL Server 2008

Der verlinkte Artikel enthält einfache Beispiele dafür, wie jeder Ansatz zu implementieren.

+0

Leider ist der verlinkte Inhalt nicht mehr verfügbar. Ich denke, das ist der Artikel: http://www.techrepublic.com/blog/the-enterprise-cloud/comparing-cursor-vs-while-loop-performance-in-sql-server-2008/1741/ –

+0

@PawelKrakowiak Fest, danke. –