sql >> Database >  >> RDS >> Mysql

MySQL SUM Query is extreem traag

(Ja, ik voeg nog een toe antwoorden. Motivering:Het pakt het onderliggende probleem op een andere manier aan.)

Het onderliggende probleem lijkt te zijn dat er een steeds groter wordende "transactie"-tabel is waaruit verschillende statistieken zijn afgeleid, zoals SUM(amount) . De prestatie hiervan zal alleen maar slechter en slechter worden naarmate de tafel(s) groeien.

De basis voor dit antwoord is om op twee manieren naar de gegevens te kijken:"Geschiedenis" en "Huidige". Transactions is de Geschiedenis. Een nieuwe tabel is de Current totalen voor elke gebruiker. Maar ik zie meerdere manieren om dat te doen. Elk omvat een of andere vorm van subtotalen om te voorkomen dat 773K rijen worden toegevoegd om het antwoord te krijgen.

  • De traditionele manier van bankieren... Tel elke nacht de Transactions van de dag op en voeg ze toe aan Current .
  • De manier van materialiseren... Elke keer dat er een rij wordt toegevoegd aan Transactions , verhoog Current .
  • Hybride:bewaar dagelijkse subtotalen in een 'overzichtstabel'. Tel die subtotalen bij elkaar op om de SUM . te krijgen tot gisteravond.

Meer discussie in mijn blog op Samenvattingstabellen .

Merk op dat het up-to-the-second saldo voor de bank- of hybride manier een beetje lastig is:

  1. Ontvang het bedrag van gisteravond
  2. Voeg alle transacties toe die gedurende de dag hebben plaatsgevonden.

Elk van de benaderingen zal veel zijn sneller dan het scannen van alle 773K rijen voor de gebruiker, maar het zal complexere code zijn.



  1. Kan een C#-programma een tekstbestand in het geheugen lezen en dat object vervolgens doorgeven aan een methode waarvoor een bestandsnaam nodig is?

  2. MariaDB - INNODB slaat de nummerreeks over tijdens het maken van incrementele records - waarom?

  3. MySQL VERVANGEN IN op meerdere sleutels?

  4. Een gegevensmodel om uw kostbaarste bezit bij te houden