sql >> Databasteknik >  >> RDS >> Mysql

MySQL SUM Query är extremt långsam

(Ja, jag lägger till en annan svar. Motivering:Det tar upp det underliggande problemet på ett annat sätt.)

Det underliggande problemet verkar vara att det finns en ständigt växande "transaktionstabell" från vilken olika statistik härleds, såsom SUM(amount) . Prestanda för detta kommer bara att bli sämre och sämre när tabellen/tabellerna växer.

Grunden för detta svar kommer att vara att titta på data på två sätt:"Historik" och "Aktuell". Transactions är historien. En ny tabell skulle vara Current totalt för varje användare. Men jag ser flera sätt att göra det på. Var och en involverar någon form av delsummor för att undvika att lägga till 773 000 rader för att få svaret.

  • Det traditionella banksättet... Varje natt räknar upp dagens Transactions och lägg till dem i Current .
  • Sättet med materialiserad vy... Varje gång en rad läggs till i Transactions , öka Current .
  • Hybrid:Spara dagliga delsummor i en "sammanfattningstabell". Summera dessa delsummor för att få SUM till i går kväll.

Mer diskussion i min blogg på Sammanfattningstabeller .

Observera att det upp till andra saldot för bank- eller hybridsättet är lite knepigt:

  1. Få gårdagens belopp
  2. Lägg till eventuella transaktioner som inträffade under dagen.

Alla tillvägagångssätt kommer att vara mycket snabbare än att skanna alla 773 000 rader för användaren, men det blir mer komplex kod.



  1. SQL 'LIKE'-syntax

  2. Dela upp varchar i separata kolumner i Oracle

  3. Hämta frågeresultat som dict i SQLAlchemy

  4. Använd stor bokstav i varje ord i befintlig tabell