sql >> Database teknologi >  >> RDS >> Mysql

MySQL SUM-forespørgsel er ekstremt langsom

(Ja, jeg tilføjer en anden svar. Begrundelse:Det løser det underliggende problem på en anden måde.)

Det underliggende problem synes at være, at der er en stadigt voksende "transaktionstabel", hvorfra der udledes forskellige statistikker, såsom SUM(amount) . Ydeevnen af ​​dette vil kun blive værre og dårligere, efterhånden som tabellen/tabellerne vokser.

Grundlaget for dette svar vil være at se på dataene på to måder:"Historie" og "Aktuel". Transactions er Historien. En ny tabel ville være den Current totaler for hver bruger. Men jeg ser flere måder at gøre det på. Hver involverer en eller anden form for subtotal(er) for at undgå at tilføje 773.000 rækker for at få svaret.

  • Den traditionelle bankmåde... Hver nat tæller dagens Transactions op og føj dem til Current .
  • Måden Materialized View... Hver gang en række føjes til Transactions , øg Current .
  • Hybrid:Gem daglige subtotaler i en "oversigtstabel". Sum disse subtotaler for at få SUM til i aftes.

Mere diskussion i min blog på Oversigtstabeller .

Bemærk, at den op til anden saldo for bank- eller hybridmetoden er lidt vanskelig:

  1. Få sidste nats beløb
  2. Tilføj alle transaktioner, der fandt sted i løbet af dagen.

Enhver af tilgangene vil være en masse hurtigere end at scanne alle 773.000 rækker for brugeren, men det vil være mere kompleks kode.



  1. Hvordan genereres hele DDL af et Oracle-skema (scriptable)?

  2. PHP - Opret et indlejret array fra MySQL-data

  3. BOOLEAN eller TINYINT forvirring

  4. Udfyld HTML/PHP dropdown baseret på første dropdown valg