Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL SUM Query é extremamente lento


(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 a Current .
  • A maneira de visualização materializada... Cada vez que uma linha é adicionada a Transactions , incrementa Current .
  • 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:
  1. Receba o valor da noite anterior
  2. 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.