Cursor verus While loop - Quels sont les avantages / inconvénients des curseurs?
-
02-07-2019 - |
Question
Est-ce une bonne idée d'utiliser une boucle While au lieu d'un curseur? Quels sont les avantages / inconvénients des curseurs?
La solution
Certaines dépendent du SGBD, mais généralement:
Avantages:
-
Surperformez les boucles en matière de traitement ligne par ligne
-
Fonctionne relativement bien avec de grands ensembles de données
Inconvénients:
-
Ne redimensionnez pas aussi bien
-
Utiliser davantage de ressources du serveur
-
Augmente la charge sur tempdb
-
Peut causer des fuites s’il n’est pas utilisé correctement (par exemple, Ouvrir sans fermer correspondant)
Autres conseils
Je suis ce conseil:
[...] ce qui est mieux: les curseurs ou Pendant que les boucles? Encore une fois, cela dépend vraiment sur votre situation. J'utilise presque toujours un curseur pour parcourir les enregistrements lorsque nécessaire. Le format du curseur est un un peu plus intuitif pour moi et, puisque je viens d'utiliser les constructions pour parcourir le jeu de résultats une fois, il est logique d'utiliser le FAST_FORWARD le curseur. Rappelez-vous que le type de le curseur que vous utilisez aura un impact énorme sur la performance de votre boucle construire.
& # 8212; Tim Chapman dans Comparaison des performances du curseur et de la boucle WHILE dans SQL Server 2008
L'article lié contient des exemples simples sur la manière de mettre en œuvre chaque approche.
Je vous demanderais ce que vous faites avec cette boucle de curseur / While.
Si vous mettez à jour ou renvoyez des données, pourquoi ne pas utiliser une clause WHERE appropriée. Je connais des gens qui diraient que vous ne devriez jamais utiliser de curseurs.