Dúvida sobre performance do BD

Bom dia, galera!

Venho aqui pedir um auxílio a vocês.

Estamos desenvolvendo um software de gestão (não Java) que usa p/ persistência o banco de dados MySQL. A comunicação toda é feita sob o ODBC.

Na versão anterior do sistema, o controle de estoque dos produtos era feito da seguinte forma: quando ocorria uma saída/entrada, era lançado um registro no extrato do estoque, e o campo Saldo era atualizado no produto.

Entretanto, propus ao patrão que, uma vez tendo em vista que o saldo do produto deve sempre fechar com o saldo do extrato (ou seja, somando todas as entradas e subtraindo as saídas, deve dar o mesmo número) então não há necessidade de armazenar o saldo no cadastro do produto. Simplesmente contabilizando o extrato poderíamos o saldo correto e atualizado sem necessidades adicionais (ficar atualizando o cadastro do produto toda vez que uma NF entra/sai).

Para fazer essa soma, criei uma View. A instrução dela é essa:


SELECT produtos.ID AS IDProduto, estoque_extrato.IDFilial AS Filial, produtos.Descricao AS Produto, SUM(IF(estoque_extrato.Tipo = ‘E’, estoque_extrato.Quantidade, -(estoque_extrato.Quantidade))) AS Saldo FROM estoque_extrato, produtos WHERE produtos.ID = estoque_extrato.IDProduto GROUP BY estoque_extrato.IDFilial, estoque_extrato.IDProduto;

A minha dúvida é a seguinte: o extrato é algo que vai crescer rapidamente, pois cada nota de entrada ou saída da empresa irá criar X entradas no extrato, onde X é o número de produtos das notas.

Há o risco de com o tempo essa view ficar extremamente lenta? Pois imaginem que ela terá de somar todo o extrato para todos os produtos.

O que vocês acham? Vale a pena manter a view (com o risco da queda progressiva de performance com o passar do tempo) ou eu devo mesmo ter o trabalho de atualizar o saldo no cadastro do produto?

Agrupamento é uma das operações mais custosas pra um SGBD!

Se for levar em consideração o custo/benefício das duas opções sugeridas, eu ficaria com a segunda. Vc nao vai perder nem 1 segundo atualizando o saldo e na hora de retornar não demorará nem 1 segundo para retornar o saldo.

No entanto com a view vc não gasta nada para atualizar o saldo (pois não precisaria) e pode vir a demorar uns bons segundos quando precisasse consultar.