2010-08-17 4 views
0

ce qui est bon, en utilisant explicite curseur, tandis que la boucle sur le côté de la base de données OU en utilisant la boucle sur l'extrémité avant (programme côté application) ???qu'est-ce qui est bien, explicite le curseur dans le backend ou la boucle à l'avant?

Modifié: - Salut, si je veux itérer et je suis en utilisant une connexion asynchrone ado.net (déconnecté) (ie.I ont une datatable et je demande boucle sur datatable en fin avant) - Dans ce cas, si je veux itérer ce qui est mieux sur le côté de DB ou le côté d'extrémité avant?

Répondre

7

La meilleure approche consiste à tirer parti de la nature basée sur l'ensemble de SQL et à éviter les curseurs lorsque vous le pouvez. Si vous pouvez réécrire une requête en utilisant un curseur à celui qui utilise JOIN, vous devriez toujours le faire.

Si vous trouvez une situation où vous devez itérer, il est généralement préférable de le faire sur le serveur de base de données. Cela permet d'éviter la surcharge des appels répétés à la base de données qui se produiront si vous le faites dans la couche d'application.

Mise à jour: Si vous devez effectuer une itération à l'avant ou non, tout dépend de ce que vous voulez faire dans la boucle. Afficher les données? Alors, bien sûr, vous voulez probablement itérater sur le frontend. Si, toutefois, vous parcourez les données afin de chercher autre chose dans la base de données, faites un calcul, etc., vous feriez mieux de le faire sur le serveur db. Nous aurons besoin de plus de détails pour faire des recommandations détaillées, pour l'instant nous ne pouvons parler en général qu'avec les informations que vous avez fournies.

+0

Salut, si je veux itérer et je suis en utilisant une connexion asynchrone ado.net (j'ai un ensemble de données et je pose ma candidature pour boucle ensemble de données front end) alors fera-t-il des appels répétés ??? ... tout autre avantage ??? – hrishi

+1

Quelle est la complexité de votre requête? Si ce n'est pas mauvais je pourrais essayer de l'afficher ici et voir si quelqu'un peut le réécrire pour vous sans un curseur. Vous seriez surpris à quelle fréquence vous pouvez ... –

+1

@hrishi => Aucune boucle sur l'ensemble de données ne fera pas d'appels répétés pendant que l'ensemble de données fonctionne dans une architecture déconnectée. – Prashant

0

La meilleure chose est une opération basée sur un ensemble (comme JOIN ou APPLY) exprimée en SQL.

Parfois, cependant, cela n'est pas possible (en raison de la complexité de l'algorithme ou de l'absence de prise en charge du dialecte SQL côté DB).

Dans ce cas, il est préférable de traiter les résultats côté DB avec une boucle de langage procédural DB. Cela vous permettra d'économiser les allers-retours entre le client et le serveur.

seulement si SQLet langage procédural ne sont pas assez puissants pour traiter vos données, il vaut la peine de télécharger les données au client (de la manière majeure du serveur et support client ce) et faire le traitement là-bas .

0

Cela dépend de votre analyse de rentabilisation. Si vous avez une énorme logique métier, je vous conseille de mettre en application. Performance sage - Essayez d'éviter les boucles dans db en utilisant des clauses de jointure. Si cela ne fonctionne pas, alors faites une boucle en fin de base de données. puis pour la boucle dans l'application et ensuite les curseurs.

0

L'itération est une mauvaise chose dans les bases de données et doit être évitée dans la mesure du possible. N'utilisez pas cela comme votre premier choix de la façon de faire les choses lors de l'accès à une base de données. Jusqu'à ce que vous ayez essayé de trouver un moyen basé sur un ensemble pour effectuer la tâche, vous ne devriez pas considérer l'itération.

Lire ceci pour des idées sur la façon de mieux faire les choses: http://wiki.lessthandot.com/index.php/Cursors_and_How_to_Avoid_Them

Questions connexes