Re: [firebase-br] Extrema Lentidão em Consulta Firebird 5
Luciano franca via lista <[email protected]> Fri, 16 May 2025 21:13:33 -0300
| Newsgroups | gmane.comp.db.firebase.portuguese |
|---|---|
| Message-ID | <24cceca4-8bc5-4052-b0b9-51d57f95de1b@Spark> |
Interesse dizer que no seu caso o firebird é mais rápido que o postgresql. Aqui no meu sistema tenho 180 relatórios e em todos eles o postgresql ganha e não é por pouca coisa não, geralmente é coisas do tipo 10 segundos contra 3 minutos. O caso mais absurdo é esse do estoque. Porém veja esses casos todos são em bancos grandes porque os pequenos são todos firebird. Porém passou de 5gb já faço migração para postgresql. Quer ver diferença é "window functions" ai o postgresql é um foguete comparado ao firebird. Em 16 de mai. de 2025, 18:27 -0300, Rodrigo Gomes da Silva <[email protected]>, escreveu: > Sentença ruim pacas... coloque uma sentença valida que é mais facil de analisar... > > Aonde trabalho nos usamos firebird e postgresql. O sistema era feito somente com firebird, e passamos a converter ele para funcionar nos 2 sistemas. Bancos com dados de 1gb a 300gb (1 deles tem 3tb mas é de arquivos binários). Diversas sentenças rodavam mais rapidas no firebird que tiveram de ser alteradas para rodar melhor no postgresql, aonde o mesmo banco convertido do firebird ficava bem mais lento, e o contrário é verdadeiro tb. > > Cada banco tem suas particularidades, e uma do postgresql é que é dificil medir tempo individual de sentença pois ele faz algum tipo de cache de resultados aonde uma sentença pode demorar, mas se vc tentar rodar ela denovo vai rapido pq o PG fez algum cache não dos dados, e sim de algo relacionado com o resultado ou filtro. > > Por tudo que ja tivemos de problema com lentidão de sentença, a sua de exemplo basico vai ficar lenta mesmo, pq esta multiplicando o numero de registros da 1a com o da 2a... > > Olhando a sua sentenca do 1o post, uma coisa que pode ser q deixe ela lenta é que o firebird pode estar processando os 2 with todos registros de estoque que vc ta agrupando... você pode resolver isso fazendo uma subquery 1o depois fazer a contagem da quantidade... tenta mantendo o mesmos with (soma_estoque_1 e cadastro_preco) e use o select principal como > > SELECT SUB.MERCADORIA, SUB.Descricao, SUB.Codigo, SUB.Saldo_Tipo, SUM(REL.Quant) as Saldo_Total > FROM > (SELECT > CAD.MERCADORIA, > GP.Descricao, > CAD.Codigo, > ST1.Saldo_Tipo > FROM > CADASTRO_MERCADORIAS CAD > 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 > ) SUB > LEFT JOIN ESTOQUE REL ON REL.Cod_Mercadoria = SUB.Codigo > GROUP BY > SUB.MERCADORIA, > SUB.Descricao, > SUB.Codigo, > SUB.Saldo_Tipo > > > Fiz no bloco de notas, então poderia ter algum erro ai, mas a ideia deve ter dado para perceber... > > On Fri, May 16, 2025 at 5:39 PM Luciano franca <[email protected]> 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 <[email protected]> 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. ______________________________________________ FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107 Para consultar mensagens antigas: http://www.firebase.com.br/pesquisa_lista.html