[firebase-br] Extrema Lentidão em Consulta Firebird 5

Rodrigo Gomes da Silva rodrgomes em gmail.com
Sexta Maio 16 18:40:02 -03 2025


E uma outra coisa ... se você tem cada entrada de estoque gera um registro
em estoque, e vai tendo a saida até a Quant estar zerada, compensa vc
ignorar esses registros sempre que for processar algo de estoque sobrando,
criando um índice tipo Cod_Mercadoria+Quant e fazer
  LEFT JOIN Soma_Estoque_1 ST1 ON ST1.Cod_Mercadoria = REL.Cod_Mercadoria
and ST1.Quant>0

Assim ele pula os registros sem estoque (que deve ser a maioria pra cada
produto) direto no filtro ao invés de ficar lento todos eles pra somar 0

On Fri, May 16, 2025 at 5:39 PM Luciano franca <luapfirebird em yahoo.com.br>
wrote:

> Eu Fiz apenas um exemplo basico onde dois "LEFT Join" causam extrema
> lentidão no Firebird meu SQL completo.
> Veja esse topico para entender melhor
>
> https://github.com/FirebirdSQL/firebird/issues/8568
>
>
>
>
>
>
> Em sexta-feira, 16 de maio de 2025 às 15:48:49 BRT, Rodrigo Gomes da Silva
> <rodrgomes em gmail.com> escreveu:
>
>
> SELECT
> CM.Codigo,
> CM.MERCADORIA,
> Sum(E.quant) As Saldo,
> AVG(E2.preco_custo) As Preco
> FROM CADASTRO_MERCADORIAS CM
> left Join ESTOQUE E ON (E.Cod_Mercadoria = CM.codigo)
> left Join ESTOQUE E2 ON ( E2.Cod_Mercadoria = CM.Codigo )
> Group By 1, 2
>
> Você quer o preço medio e a quantidade, por que esta fazendo 2 joins para
> o mesmo filtro? Os registros são multiplicados.
>
> SELECT
> CM.Codigo,
> CM.MERCADORIA,
> Sum(E.quant) As Saldo,
> AVG(E.preco_custo) As Preco
>
> FROM CADASTRO_MERCADORIAS CM
> left Join ESTOQUE E ON (E.Cod_Mercadoria = CM.codigo)
> Group By 1, 2
>
>
> Aparentemente bastaria fazer isso.
>


Mais detalhes sobre a lista de discussão lista