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?
Répondre
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)
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.
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.
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/ –
@PawelKrakowiak Fixe, merci. –
Voulez-vous dire une boucle while dans le code côté client? Pouvez-vous donner un exemple? – Kev
Je suis d'accord avec Kev, pourriez-vous préciser ce que vous essayez d'accomplir? –
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