sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvad er fordele og ulemper ved at udføre beregninger i sql vs. i din ansøgning

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".



  1. Databasebrugerstyring:Håndtering af roller for MariaDB

  2. Sådan repareres MySQL-databaser og tabeller

  3. Fejl:pg_config eksekverbar fil blev ikke fundet ved installation af psycopg2 på Alpine i Docker

  4. Sådan får du en beregnet kolonnes definition i SQL Server ved hjælp af T-SQL