(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 zuCurrent
hinzu . - Der materialisierte Ansichtsweg... Jedes Mal, wenn eine Zeile zu
Transactions
hinzugefügt wird , erhöhen SieCurrent
. - 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:
- Erhalten Sie den Betrag der letzten Nacht
- 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.