Det afhænger af en masse faktorer - men mest afgørende:
- kompleksiteten af beregninger (foretrækker at lave kompleks crunching på en app-server, da det skalerer ud; snarere end en db-server, som skalerer op )
- datamængde (hvis du har brug for at få adgang til/aggregere en masse data, vil det spare båndbredde ved at gøre det på db-serveren, og disk io, hvis aggregaterne kan udføres i indekser)
- bekvemmelighed (sql er ikke det bedste sprog til komplekst arbejde - især ikke fantastisk til procedurearbejde, men meget godt til sæt-baseret arbejde; dog elendig fejlhåndtering)
Som altid, hvis du gør bringe dataene tilbage til app-serveren, minimering af kolonner og rækker vil være til din fordel. At sikre, at forespørgslen er indstillet og korrekt indekseret, hjælper begge scenarier.
Til din note:
og derefter gå gennem posterne
Looping gennem registreringer er næsten altid den forkerte ting at gøre i sql - at skrive en sæt-baseret operation foretrækkes.
Som en generel regel , foretrækker jeg at holde databasens job på et minimum "gem disse data, hent disse data" - dog er der altid eksempler på scenarier, hvor en elegant forespørgsel på serveren kan spare en masse båndbredde.
Overvej også:Hvis dette er beregningsmæssigt dyrt, kan det så cachelagres et sted?
Hvis du ønsker en nøjagtig "hvilken er bedre"; kode det begge veje og sammenlign det (bemærk, at et første udkast af begge sandsynligvis ikke er 100 % tunet). Men tag typisk brug med til det:hvis det i virkeligheden bliver kaldt 5 gange (separat) på én gang, så simuler det:sammenligne ikke kun en enkelt "1 af disse mod 1 af dem".