Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zapytanie MySQL SUM jest bardzo wolne

(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 do Current .
  • Sposób widoku zmaterializowanego... Za każdym razem, gdy wiersz jest dodawany do Transactions , zwiększ Current .
  • 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:

  1. Zdobądź kwotę z zeszłej nocy
  2. 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę zabezpieczyć nazwę użytkownika i hasło MySQL przed dekompilacją?

  2. Jak zaimportować plik SQL za pomocą wiersza poleceń w MySQL?

  3. jak uzyskać identyfikator ostatniego wstawienia po zapytaniu o wstawienie w aktywnym rekordzie codeigniter

  4. MYSQL, bardzo powolne zamawianie przez

  5. Funkcja rankingowa w MySQL