Zależy to od wielu czynników - ale co najważniejsze:
- złożoność obliczeń (najlepiej wykonywać złożone obliczenia na serwerze aplikacji, ponieważ skaluje się to na zewnątrz; zamiast serwera bazy danych, który skaluje się w górę )
- wielkość danych (jeśli potrzebujesz dostępu/agregacji dużej ilości danych, zrobienie tego na serwerze bazy danych pozwoli zaoszczędzić przepustowość i dysk we/wy, jeśli agregację można wykonać wewnątrz indeksów)
- wygoda (sql nie jest najlepszym językiem do złożonej pracy - szczególnie nie jest dobry do pracy proceduralnej, ale bardzo dobry do pracy opartej na zbiorach; jednak kiepska obsługa błędów)
Jak zawsze, jeśli robisz przenieś dane z powrotem do serwera aplikacji, minimalizacja kolumn i wierszy będzie na twoją korzyść. Upewnienie się, że zapytanie jest dostrojone i odpowiednio zindeksowane, pomoże w obu scenariuszach.
Przypomnij swoją notatkę:
a następnie przejdź przez rekordy
Pętla przez rekordy jest prawie zawsze złą rzeczą do zrobienia w sql - preferowane jest pisanie operacji opartej na zbiorach.
Co do zasady , wolę ograniczyć zadanie bazy danych do minimum „przechowuj te dane, pobierz te dane” – jednak zawsze są przykłady scenariuszy, w których eleganckie zapytanie na serwerze może zaoszczędzić dużo przepustowości.
Zastanów się również:jeśli jest to kosztowne obliczeniowo, czy można je gdzieś zapisać w pamięci podręcznej?
Jeśli chcesz dokładnego „co jest lepsze”; zakoduj go w obie strony i porównaj (zauważ, że pierwszy szkic jednego z nich prawdopodobnie nie jest w 100% dostrojony). Ale weź pod uwagę typowe użycie:jeśli w rzeczywistości jest on wywoływany 5 razy (oddzielnie) jednocześnie, zasymuluj to:nie porównuj tylko jednego „1 z tych z 1 z tamtych”.