Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Die MySQL-SUM-Abfrage ist extrem langsam

(Ja, ich füge einen weiteren hinzu Antworten. Begründung:Das zugrunde liegende Problem wird anders angegangen.)

Das zugrunde liegende Problem scheint zu sein, dass es eine ständig wachsende "Transaktions"-Tabelle gibt, aus der verschiedene Statistiken abgeleitet werden, wie z. B. SUM(amount) . Die Leistung wird immer schlechter, je größer die Tabelle(n) werden.

Die Grundlage für diese Antwort wird darin bestehen, die Daten auf zwei Arten zu betrachten:"Verlauf" und "Aktuell". Transactions ist die Geschichte. Eine neue Tabelle wäre Current Gesamtsummen für jeden Benutzer. Aber ich sehe mehrere Möglichkeiten, das zu tun. Jede enthält eine oder mehrere Zwischensummen, um das Hinzufügen von 773.000 Zeilen zu vermeiden, um die Antwort zu erhalten.

  • Die traditionelle Bankmethode... Jede Nacht zählen Sie die Transactions des Tages und fügen Sie sie zu Current hinzu .
  • Der materialisierte Ansichtsweg... Jedes Mal, wenn eine Zeile zu Transactions hinzugefügt wird , erhöhen Sie Current .
  • Hybrid:Halten Sie tägliche Zwischensummen in einer "Übersichtstabelle". Summieren Sie diese Zwischensummen, um die SUM zu erhalten bis letzte Nacht.

Weitere Diskussionen in meinem Blog zu Summary Tables .

Beachten Sie, dass der sekundengenaue Kontostand für den Bank- oder Hybridweg etwas knifflig ist:

  1. Erhalten Sie den Betrag der letzten Nacht
  2. Fügen Sie alle Transaktionen hinzu, die während des Tages stattgefunden haben.

Jeder der Ansätze wird viel sein schneller als alle 773.000 Zeilen für den Benutzer zu scannen, aber es wird ein komplexerer Code sein.