2008-09-26 13 views
20

Czy warto używać pętli while zamiast kursora? Jakie są zalety/wady kursorów?Kursor w pętli - jakie są zalety/wady kursorów?

+0

Masz na myśli pętlę po stronie klienta? Czy możesz podać przykład? – Kev

+0

Zgadzam się z Kev, czy mógłbyś wyjaśnić, co próbujesz osiągnąć? –

+2

Myślę, że autor pytania oznacza, że ​​można symulować pętlę, umieszczając elementy do zapętlenia w tabeli tymczasowej. Następnie możesz "zapętlić" nad przedmiotami pętlą WHILE Count (1) <> 0. W każdej pętli przetwarzasz element i usuwasz go z tabeli tymczasowej. GDZIE pętla kontra CURSOR jest zatem dobrym pytaniem dotyczącym wydajności i innych zalet/wad. – redcalx

Odpowiedz

9

Niektóre z nich zależy od DBMS, ale ogólnie:

za:

  • przewyższają pętli, jeśli chodzi o rząd po rzędzie przetwarzania

  • Works dość dobrze z dużych zbiorów danych

Wady:

  • Nie skalować oraz

  • zużywają więcej zasobów serwera

  • wzrostem obciążenia na tempdb

  • Może powodować nieszczelności, jeśli są niewłaściwie używane (np. Otwórz bez odpowiedniego zamknięcia)

0

Niektóre wady kursory są here

Wtedy nie ma też this (rzeczywiście bardzo ciekawy problem nazywa - "problem Halloween")

1

Chciałbym zapytać, co robisz z kursorem/pętlą while.

Jeśli aktualizujesz lub zwracasz dane, dlaczego nie używasz właściwej klauzuli WHERE. Znam ludzi, którzy twierdzą, że nigdy nie powinieneś używać kursorów.

10

Obserwuję ten kawałek rada:

[...], co jest lepsze: kursory lub pętle chwilę? Znowu, to naprawdę zależy od twojej sytuacji. Niemal zawsze używam kursora, aby przechodzić po rekordach, gdy jest to konieczne. Format kursora jest nieco bardziej intuicyjny dla mnie i, , ponieważ używam tylko konstruktów do przechodzenia przez zestaw wyników raz, to ma sens, aby użyć kursora FAST_FORWARD . Pamiętaj, że typ używanego kursora będzie miał ogromny wpływ na wydajność pętli na wydajność pętli .

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

prowadzi link artykuł zawiera proste przykłady jak wdrożyć każde podejście.

+0

Niestety, treść hiperłącza nie jest już dostępna. Myślę, że to jest artykuł: http://www.techrepublic.com/blog/the-enterprise-cloud/comparing-cursor-vs-while-loop-performance-in-sql-server-2008/1741/ –

+0

@PawelKrakowiak Naprawiono, dzięki. –