2008-09-26 9 views
20

Est-ce une bonne idée d'utiliser une boucle au lieu d'un curseur? Quels sont les avantages/inconvénients des curseurs?Curseur verus while loop - Quels sont les avantages/inconvénients des curseurs?

+0

Voulez-vous dire une boucle while dans le code côté client? Pouvez-vous donner un exemple? – Kev

+0

Je suis d'accord avec Kev, pourriez-vous préciser ce que vous essayez d'accomplir? –

+2

Je pense que l'auteur de la question signifie que vous pouvez simuler une boucle en plaçant les éléments à boucler dans une table temporaire. Vous pouvez ensuite "boucler" sur les éléments avec une boucle WHILE Count (1) <> 0. Sur chaque boucle, vous traitez un élément et le supprimez de la table temporaire. WHERE loop versus CURSOR est donc une bonne question en ce qui concerne les performances et autres avantages/inconvénients. – redcalx

Répondre

9

Certains d'entre eux dépend du SGBD, mais en général:

Avantages:

  • boucles Surperformer en ce qui concerne la rangée par rangée traitement

  • fonctionne raisonnablement bien avec de grands ensembles de données

Moins:

  • Ne pas l'échelle aussi bien

  • Utiliser plus de ressources serveur

  • augmente la charge sur tempdb

  • Peut causer des fuites si utilisé incorrectement (ex. Ouvrir sans correspondant Fermer)

0

Certains inconvénients des curseurs sont here

Ensuite, il y a aussi this (En fait, un problème très intéressant appelé - « problème Halloween »)

1

Je voudrais vous demander ce que vous faites avec ce curseur/boucle while.

Si vous mettez à jour ou renvoyez des données, pourquoi n'utilisez-vous pas une clause WHERE appropriée? Je connais des gens qui diraient que vous ne devriez jamais utiliser de curseurs.

10

que je suis ce conseil:

[...] qui est mieux: les curseurs ou boucles de temps? Encore une fois, cela dépend vraiment de votre situation. Je utilise presque toujours un curseur pour faire défiler les enregistrements lorsque nécessaire. Le format du curseur est un un peu plus intuitif pour moi et, depuis que j'utilise simplement les constructions à boucle à travers le jeu de résultats une fois, il est logique d'utiliser le curseur FAST_FORWARD . Rappelez-vous que le type de curseur que vous utilisez aura un énorme impact sur la performance de votre construction en boucle.

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

L'article lié contient des exemples simples de la façon de mettre en œuvre chaque approche.

+0

Malheureusement, le contenu des hyperliens ne sont plus disponibles. Je pense que c'est l'article: http://www.techrepublic.com/blog/the-enterprise-cloud/comparing-cursor-vs-while-loop-performance-in-sql-server-2008/1741/ –

+0

@PawelKrakowiak Fixe, merci. –