Es hängt von vielen Faktoren ab - aber am wichtigsten:
- Komplexität von Berechnungen (bevorzugen Sie komplexes Crunching auf einem App-Server, da dies out skaliert; statt eines DB-Servers, der nach oben skaliert )
- Datenvolumen (wenn Sie auf viele Daten zugreifen/aggregieren müssen, spart dies auf dem DB-Server Bandbreite und Disk io, wenn die Aggregation innerhalb von Indizes erfolgen kann)
- Bequemlichkeit (sql ist nicht die beste Sprache für komplexe Arbeit - besonders nicht großartig für prozedurale Arbeit, aber sehr gut für satzbasierte Arbeit; allerdings lausige Fehlerbehandlung)
Wie immer, wenn Sie tun Bringen Sie die Daten zurück zum App-Server, die Minimierung der Spalten und Zeilen wird zu Ihrem Vorteil sein. Stellen Sie sicher, dass die Abfrage abgestimmt und angemessen indiziert ist, um beide Szenarien zu unterstützen.
Zu Ihrer Notiz:
und dann die Datensätze durchlaufen
Schleife durch Datensätze ist in SQL fast immer das Falsche - das Schreiben einer mengenbasierten Operation wird bevorzugt.
Als allgemeine Regel , ich ziehe es vor, die Aufgabe der Datenbank auf ein Minimum zu beschränken "diese Daten speichern, diese Daten abrufen" - es gibt jedoch immer Beispiele für Szenarien, in denen eine elegante Abfrage am Server viel Bandbreite sparen kann.
Bedenken Sie auch:Wenn dies rechenintensiv ist, kann es irgendwo zwischengespeichert werden?
Wenn Sie eine genaue wollen "Welches ist besser"; codieren Sie es in beide Richtungen und vergleichen Sie es (beachten Sie, dass ein erster Entwurf von beiden wahrscheinlich nicht zu 100% abgestimmt ist). Aber berücksichtigen Sie die typische Verwendung:Wenn es in Wirklichkeit 5 Mal (getrennt) auf einmal aufgerufen wird, dann simulieren Sie das:Vergleichen Sie nicht nur ein einziges "1 von diesen mit 1 von denen".