Záleží na spoustě faktorů – ale nejdůležitější je:
- složitost výpočtů (upřednostňujte komplexní křupání na aplikačním serveru, protože to se zmenšuje; spíše než db server, který se navyšuje )
- objem dat (pokud potřebujete přistupovat k velkému množství dat nebo je agregovat, ušetříte tím šířku pásma a disk io, pokud lze agregace provádět uvnitř indexů)
- pohodlí (sql není nejlepší jazyk pro složitou práci – zvláště není skvělý pro procedurální práci, ale velmi dobrý pro práci založenou na množinách; mizerné řešení chyb)
Jako vždy, pokud uděláte přeneste data zpět na aplikační server, minimalizace sloupců a řádků bude vaší výhodou. Ujištění se, že je dotaz vyladěn a vhodně indexován, pomůže oběma scénářům.
K vaší poznámce:
a poté procházet záznamy
Opakování přes záznamy je téměř vždy špatná věc v sql - dává se přednost psaní operace založené na množinách.
Obecně , preferuji omezit práci databáze na minimum "uložte tato data, načtěte tato data" - vždy však existují příklady scénářů, kdy elegantní dotaz na serveru může ušetřit spoustu šířky pásma.
Zvažte také:pokud je to výpočetně drahé, lze to někde uložit do mezipaměti?
Pokud chcete přesné "který je lepší"; nakódujte jej oběma způsoby a porovnejte (všimněte si, že první návrh ani jednoho z nich pravděpodobně není 100% vyladěn). Ale zohledněte k tomu typické použití:pokud je ve skutečnosti voláno 5krát (odděleně) najednou, pak to simulujte:neporovnávejte pouze jeden „1 z těchto vs 1 z těchto“.