(Tak, dodaję kolejny odpowiadać. Uzasadnienie:Rozwiązuje podstawowy problem w inny sposób.)
Wydaje się, że podstawowym problemem jest to, że istnieje stale rosnąca tabela „transakcji”, z której pochodzą różne statystyki, takie jak SUM(amount)
. Wydajność będzie się tylko pogarszać wraz ze wzrostem liczby tabel.
Podstawą tej odpowiedzi będzie spojrzenie na dane na dwa sposoby:„Historia” i „Aktualne”. Transactions
jest Historia. Nowa tabela to Current
sumy dla każdego Użytkownika. Ale widzę na to wiele sposobów. Każda z nich obejmuje pewną formę sum częściowych, aby uniknąć dodawania 773 tys. wierszy w celu uzyskania odpowiedzi.
- Tradycyjny sposób bankowości... Każdej nocy podlicza się
Transactions
dnia i dodaj je doCurrent
. - Sposób widoku zmaterializowanego... Za każdym razem, gdy wiersz jest dodawany do
Transactions
, zwiększCurrent
. - Hybryda:przechowuj dzienne sumy częściowe w „Tabeli podsumowującej”. Zsumuj te sumy częściowe, aby uzyskać
SUM
do ostatniej nocy.
Więcej dyskusji na moim blogu na Tabele z podsumowaniem .
Zwróć uwagę, że aktualne saldo dla metody bankowej lub hybrydowej jest trochę trudne:
- Zdobądź kwotę z zeszłej nocy
- Dodaj wszelkie transakcje, które miały miejsce w ciągu dnia.
Każde z podejść będzie dużo szybciej niż skanowanie wszystkich 773 tys. wierszy dla użytkownika, ale będzie to bardziej złożony kod.