[firebase-br] Extrema Lentidão em Consulta Firebird 5
Luciano franca
luapfirebird em yahoo.com.br
Quarta Maio 14 18:41:53 -03 2025
Esses dois SQL chegam a demorar 15 minutos e 30 minutoscom os mesmo índices e registros no PostgreSQL é 15 segundos.
Percebo extrema lentidão no firebird desde a versão 3 o tempo passou estamos na versão 5 e nada mudoumeu sistema consegue trabalhar com dois banco de dados Firebird ou Postgres porém tenho vários clientes com Firebird que eu não queria mudar para postgres pois se trata de um processo complexo onde tenho que instalar uma ferramenta de conversão de dados no cliente para fazer a migração.
Como eu poderia fazer para enviar o banco de dados de produção para os criadores do Firebird pois eu já tentei de todas as formas e não sei mais como otimizar acredito ser limitação do Firebird.
WITH CADASTRO_PRECO As ( SelectGP.COD_PRODUTO, GP.DESCRICAO,GP.INATIVO,GP.FILIAL, GP.ID_PRECO From Cadastro_Precos GPInner Join CADASTRO_MERCADORIAS CM On ( CM.Codigo = GP.Cod_Produto ) Where ( GP.INATIVO is Null Or GP.INATIVO = '' Or GP.INATIVO = 'N' ) )
,Soma_Estoque_1 As ( Select E.Cod_Mercadoria, Sum(E.Quant) Saldo_Tipo From Estoque E Inner Join CADASTRO_TIPO_MERCADORIAS CTP On ( CTP.Codigo = E.Cod_Aplicacao ) Where (E.Lixo <> 'S' Or E.Lixo is Null Or E.Lixo = '') And ( E.Arquivo <> 'S' Or E.Arquivo is Null Or E.Arquivo = '' ) And E.data_emissao >= '01.12.2024' Group By E.Cod_Mercadoria )
SELECT CAD.MERCADORIA,GP.Descricao,CAD.Codigo,ST1.Saldo_Tipo,Sum(REL.Quant) Saldo_Total
FROM CADASTRO_MERCADORIAS CAD
left Join ESTOQUE REL ON (REL.Cod_Mercadoria = CAD.codigo)left join CADASTRO_PESSOAS CF on (CF.Codigo = CAD.cod_fornecedor )left join Cadastro_Preco GP ON (GP.cod_produto = REL.Cod_Mercadoria And GP.ID_Preco = REL.ID_Preco )Left Join Soma_Estoque_1 ST1 on (ST1.Cod_Mercadoria = REL.Cod_Mercadoria )
Group By 1, 2, 3, 4
//----------------------------------------------------------------------------------------------------------------------------------------------
SELECTE.COD_MERCADORIA,E.Mercadoria,E.data_emissao,SUM(E.Quant),
( Select Coalesce(Sum(Coalesce(ES.Quant, 0)), 0) From ESTOQUE ES Where (ES.Lixo <> 'S' Or ES.Lixo is Null Or ES.Lixo = '') And ( ES.Arquivo <> 'S' Or ES.Arquivo is Null Or ES.Arquivo = '' ) And ES.Cod_Mercadoria = E.Cod_Mercadoria And ES.data_emissao <= E.data_emissao And (( ES.FILIAL = 0 Or ES.FILIAL Is Null ) OR ES.FILIAL = 1 ) ) As SALDO_DIARIO
FROM ESTOQUE E INNER Join CADASTRO_MERCADORIAS CM on (CM.Codigo = E.COD_MERCADORIA )
Where (E.Lixo <> 'S' Or E.Lixo is Null Or E.Lixo = '')And ( E.Arquivo <> 'S' Or E.Arquivo is Null Or E.Arquivo = '' ) And ( (( CM.Estoque_Filial is Not Null And CM.Estoque_Filial <> 0 ) And (CM.Estoque_Filial = E.Filial) And E.Filial = 1 ) Or( CM.Estoque_Filial is Null Or CM.Estoque_Filial = 0 ) )
Group By 1, 2, 3Having SUM(E.Quant) <> 0Order By E.COD_MERCADORIA, E.Data_Emissao Desc
Mais detalhes sobre a lista de discussão lista