(Sim, estou adicionando outro responda. Justificativa:Ele aborda o problema subjacente de uma maneira diferente.)
O problema subjacente parece ser que existe uma tabela de "transação" cada vez maior da qual derivam várias estatísticas, como
SUM(amount)
. O desempenho disso só ficará cada vez pior à medida que a(s) tabela(s) crescerem. A base para esta resposta será analisar os dados de duas maneiras:"Histórico" e "Atual".
Transactions
é a História. Uma nova tabela seria a Current
totais para cada usuário. Mas vejo várias maneiras de fazer isso. Cada um envolve algum tipo de subtotal(s) para evitar a adição de 773 mil linhas para obter a resposta. - O modo bancário tradicional... Cada noite, calcule as
Transactions
do dia e adicione-os aCurrent
. - A maneira de visualização materializada... Cada vez que uma linha é adicionada a
Transactions
, incrementaCurrent
. - Híbrido:mantenha os subtotais diários em uma "Tabela de resumo". Some esses subtotais para obter o
SUM
até ontem à noite.
Mais discussões em meu blog sobre Tabelas de resumo .
Observe que o saldo até o segundo para o modo bancário ou híbrido é um pouco complicado:
- Receba o valor da noite anterior
- Adicione todas as transações que ocorreram durante o dia.
Qualquer uma das abordagens será muito mais rápido do que digitalizar todas as 773 mil linhas para o usuário, mas será um código mais complexo.