(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
Transactionsdes Tages und fügen Sie sie zuCurrenthinzu . - Der materialisierte Ansichtsweg... Jedes Mal, wenn eine Zeile zu
Transactionshinzugefügt wird , erhöhen SieCurrent. - Hybrid:Halten Sie tägliche Zwischensummen in einer "Übersichtstabelle". Summieren Sie diese Zwischensummen, um die
SUMzu 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.