O motor de relatórios
Os relatórios de DRE e fluxo de caixa eram, de longe, a parte mais lenta do produto. Esta é a história de como resolvemos isso.
Diagnóstico
Usando EXPLAIN ANALYZE, identificamos que 90% do tempo era gasto em joins não indexados entre lançamentos e categorias, repetidos para cada mês do período consultado.
A correção
- Índices compostos nas colunas mais consultadas
- Pré-agregação mensal via materialized view, atualizada por trigger
- Cache de resultado por 5 minutos para o mesmo filtro
Resultado
O relatório de DRE anual, que levava até 8 segundos para carregar, agora responde em menos de 400ms.