sql >> Databasteknik >  >> RDS >> PostgreSQL

Vilka är för- och nackdelarna med att utföra beräkningar i sql vs. i din ansökan

Det beror på många faktorer - men mest avgörande:

  • komplexitet i beräkningar (föredrar att göra komplex crunching på en app-server, eftersom det skalas ut; snarare än en db-server, som skalar upp )
  • Datavolym (om du behöver komma åt/samla ihop mycket data sparar du bandbredd om du gör det på db-servern, och disk io om aggregaten kan göras i index)
  • bekvämlighet (sql är inte det bästa språket för komplext arbete - speciellt inte bra för procedurarbete, men mycket bra för set-baserat arbete, dock usel felhantering)

Som alltid, om du gör föra tillbaka data till app-servern, minimering av kolumner och rader kommer att vara till din fördel. Att se till att frågan är avstämd och korrekt indexerad hjälper båda scenarierna.

Om din anteckning:

och gå sedan igenom posterna

Slinga genom poster är nästan alltid fel sak att göra i sql - att skriva en uppsättningsbaserad operation är att föredra.

Som en allmän regel , jag föredrar att hålla databasens jobb till ett minimum "lagra denna data, hämta denna data" - dock finns det alltid exempel på scenarier där en elegant fråga på servern kan spara mycket bandbredd.

Tänk också på:om detta är beräkningsmässigt dyrt, kan det cachelagras någonstans?

Om du vill ha en exakt "vilket är bättre"; koda det åt båda hållen och jämför det (notera att ett första utkast av någon av dem sannolikt inte är 100 % avstämt). Men räkna med typisk användning till det:om det i verkligheten anropas 5 gånger (separat) på en gång, simulera det:jämför inte bara en enda "1 av dessa mot 1 av dessa".



  1. Beräkna tidsskillnaden mellan två rader

  2. ROW_NUMBER() i MySQL

  3. ADD_MONTHS() Funktion i Oracle

  4. Django prefetch_related med limit