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

MySQL SUM Query è estremamente lento

(Sì, ne sto aggiungendo un altro Rispondere. Motivazione:affronta il problema di fondo in modo diverso.)

Il problema di fondo sembra essere che esiste una tabella di "transazioni" in continua crescita da cui derivano varie statistiche, come SUM(amount) . Le prestazioni di questo non potranno che peggiorare man mano che i tavoli crescono.

La base per questa risposta sarà guardare i dati in due modi:"Cronologia" e "Attuale". Transactions è la Storia. Una nuova tabella sarebbe la Current totali per ogni Utente. Ma vedo diversi modi per farlo. Ciascuno comporta una qualche forma di subtotale/i in modo da evitare di aggiungere 773.000 righe per ottenere la risposta.

  • Il metodo bancario tradizionale... Ogni notte calcola le Transactions del giorno e aggiungili a Current .
  • Il modo di visualizzazione materializzata... Ogni volta che viene aggiunta una riga a Transactions , incrementa Current .
  • Ibrido:conserva i totali parziali giornalieri in una "tabella riepilogativa". Somma quei subtotali per ottenere il SUM fino a ieri sera.

Altre discussioni nel mio blog su Tabelle di riepilogo .

Tieni presente che il saldo fino al secondo per la modalità bancaria o ibrida è un po' complicato:

  1. Ricevi l'importo della scorsa notte
  2. Aggiungi tutte le Transazioni avvenute durante il giorno.

Qualsiasi approccio sarà molto più veloce della scansione di tutte le 773.000 righe per l'utente, ma sarà un codice più complesso.