Re: [firebase-br] Extrema Lentidão em Consulta Fire bird 5
"Carlos H. Cantu via lista" <[email protected]> Thu, 15 May 2025 10:50:02 -0300
| Newsgroups | gmane.comp.db.firebase.portuguese |
|---|---|
| Organization | WarmBoot Informatica - FireBase |
| Message-ID | <[email protected]> |
SELECT CM.Codigo, CM.MERCADORIA 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 Esse select não faz sentido e estaria gerando "zilhões" de registros a serem agrupados, fora o fato que não há índice pro campo Cod_Mercadoria na tabela estoque, fazendo com que as junções fiquem ineficientes. Eu não uso Postgresql, mas arrisco dizer que se pegar essa mesma base e converte-la sem mudar nada, esse mesmo select nele tb ficaria ruim. []s Carlos H. Cantu eBook Guia de Migração para o FB 5 - www.firebase.com.br/guiafb5.php www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br Lfvl> Tanto o Backup do Banco como os comando DDL do banco estão no link abaixo: Lfvl> https://mega.nz/file/k6gUhBpJ#4gXE7oLSW_DJdKB9UZaMUQvsI9GOPiYYJ8wqciHUVdw Lfvl> Em quinta-feira, 15 de maio de 2025 às 10:22:59 BRT, Lfvl> mauricio.zottis--- via lista <[email protected]> escreveu: Lfvl> Lfvl> Bom dia. Lfvl> Poste a estrutura d(DDL) dessas tabelas Lfvl> Em 15/05/2025 10:11, Luciano franca via lista escreveu: >> novo link permanente no Mega >> https://mega.nz/file/k6gUhBpJ#4gXE7oLSW_DJdKB9UZaMUQvsI9GOPiYYJ8wqciHUVdw >> >> Esse problema eu já tenho a mais de 3 anos e nunca consegui resolver a >> minha solução atualmente é muito complexa pois envolve eu colocar o >> Postges nos cliente que reclamam de lentidão eu não gosto do Postgres >> só coloco ele em ultimo caso. >> Eu continuo achando que se trata de um Bug no Firebird >> Se puder dar uma analisada nesse banco só tem duas tabelas com o >> simples select abaixo >> SELECT CM.Codigo, CM.MERCADORIA 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 >> >> Em quinta-feira, 15 de maio de 2025 às 09:59:10 BRT, Luciano franca via >> lista <[email protected]> escreveu: >> >> Eu não entendi o que você quiz dizer com "+0 ou || " >> veja esse link onde tem o backup do Banco feito em Firebird 3 e também >> os comandos SQL caso quero criar o banco já com os >> Dadoshttps://mega.nz/file/8uYwiBoK#y3PdspfXLOSc6wGS1c4i6vHFHCXAzgqfAvX_rY2ZGMM >> Esse problema eu já tenho a mais de 3 anos e nunca consegui resolver a >> minha solução atualmente é muito complexa pois envolve eu colocar o >> Postges nos cliente que reclamam de lentidão eu não gosto do Postgres >> só coloco ele em ultimo caso. >> Eu continuo achando que se trata de um Bug no Firebird >> Se puder dar uma analisada nesse banco só tem duas tabelas com o >> simples select abaixo >> SELECT CM.Codigo, CM.MERCADORIA 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 >> >> Em quinta-feira, 15 de maio de 2025 às 09:41:34 BRT, Carlos H. Cantu >> via lista <[email protected]> escreveu: >> >> Com LEFT é a mesma coisa, PLAN e tempo continuam bons: >> >> Query >> ------------------------------------------------ >> select emissao, pn.codprod , pn2.codprod >> from notas n >> left join prodnota pn on pn.id_num = n.id_num >> left join prodnota pn2 on pn2.id_num = n.id_num >> where n.emissao > date '1.10.2024' >> >> Plan >> ------------------------------------------------ >> PLAN JOIN (JOIN (N INDEX (IDX_VENDAS_EMISSAO), PN INDEX >> (FK_PRODNOTA_NOTAFISCAL)), PN2 INDEX (FK_PRODNOTA_NOTAFISCAL)) >> >> Query Time >> ------------------------------------------------ >> Prepare : 0,00 ms >> Execute : 141,00 ms >> Avg fetch time: 0,01 ms >> >> []s >> Carlos H. Cantu >> eBook Guia de Migração para o FB 5 - www.firebase.com.br/guiafb5.php >> [1] >> www.FireBase.com.br [2] - www.firebirdnews.org [3] - >> blog.firebase.com.br >> >> Lf> O colega não usou "LEFT" não posso usar "INNER" eu não entendi o >> que você quiz dizer com "+0 ou || " >> >> Lf> veja esse link onde tem o backup do Banco feito em Firebird 3 e >> também os >> Lf> comandos SQL caso quero criar o banco já com os Dados >> Lf> 6.5 MB file on MEGA >> >> Lf> Esse problema eu já tenho a mais de 3 anos e nunca consegui >> resolver a >> Lf> minha solução atualmente é muito complexa pois envolve eu colocar o >> Postges >> Lf> nos cliente que reclamam de lentidão eu não gosto do Postgres só >> coloco ele em ultimo caso. >> >> Lf> Eu continuo achando que se trata de um Bug no Firebird >> >> Lf> Se puder dar uma analisada nesse banco só tem duas tabelas com o >> simples select abaixo >> >> Lf> SELECT CM.Codigo, CM.MERCADORIA FROM CADASTRO_MERCADORIAS CM left >> Join >> Lf> ESTOQUE E ON (E.Cod_Mercadoria = CM.codigo) left Join ESTOQUE E2 ON >> ( >> Lf> E2.Cod_Mercadoria = CM.Codigo ) Group By 1, 2 >> >> Lf> | >> Lf> | >> Lf> | >> Lf> | | | >> >> Lf> | >> >> Lf> | >> Lf> | >> Lf> | | >> Lf> 6.5 MB file on MEGA >> >> Lf> | >> >> Lf> | >> >> Lf> | >> >> Lf> Em quinta-feira, 15 de maio de 2025 às 08:54:50 BRT, Carlos H. >> Cantu <[email protected]> escreveu: >> Lf> >> Lf> O fato de mencionar a mesma tabela em mais de um join, por si só, >> não é o >> Lf> problema, desde que o PLAN mostre que um índice apropriado está >> sendo usado em >> Lf> ambas as buscas. >> >> Lf> No seu caso, ao tirar o segundo join, provavelmente está fazendo >> com que o PLAN >> Lf> mude e fique mais eficiente. Vc vai ter que ir testando alterando >> as ordens dos >> Lf> joins, usando +0 ou || '' em algumas junções, para tentar fazer com >> que o >> Lf> Firebird escolha um plano mais eficiente. >> >> Lf> Veja abaixo, o tempo foi muito rapido mesmo com 2 joins na mesma >> tabela. O PLAN >> Lf> está eficiente: >> >> Lf> Query >> Lf> ------------------------------------------------ >> Lf> select emissao, pn.codprod, pn2.codprod >> Lf> from notas n >> Lf> join prodnota pn on pn.id_num = n.id_num >> Lf> join prodnota pn2 on pn2.id_num = n.id_num -- Repetindo o JOIN >> where n.emissao >> date '1.10.2024' >> >> Lf> Plan >> Lf> ------------------------------------------------ >> Lf> PLAN JOIN (N INDEX (IDX_VENDAS_EMISSAO), PN INDEX >> (FK_PRODNOTA_NOTAFISCAL), PN2 INDEX (FK_PRODNOTA_NOTAFISCAL)) >> >> Lf> Query Time >> Lf> ------------------------------------------------ >> Lf> Prepare : 0,00 ms >> Lf> Execute : 187,00 ms >> Lf> Avg fetch time: 0,02 ms >> >> Lf> Query >> Lf> ------------------------------------------------ >> Lf> select emissao, pn.codprod >> Lf> from notas n >> Lf> join prodnota pn on pn.id_num = n.id_num -- APENAS 1 JOIN >> where n.emissao >> date '1.10.2024' >> >> Lf> Plan >> Lf> ------------------------------------------------ >> Lf> PLAN JOIN (N INDEX (IDX_VENDAS_EMISSAO), PN INDEX >> (FK_PRODNOTA_NOTAFISCAL)) >> >> Lf> Query Time >> Lf> ------------------------------------------------ >> Lf> Prepare : 0,00 ms >> Lf> Execute : 62,00 ms >> Lf> Avg fetch time: 0,01 ms >> >> Lf> []s >> Lf> Carlos H. Cantu >> Lf> eBook Guia de Migração para o FB 5 - >> www.firebase.com.br/guiafb5.php [1] >> Lf> www.FireBase.com.br [2] - www.firebirdnews.org [3] - >> blog.firebase.com.br >> >> Lfvl>> não pode ser "INNER" tem que ser "LEFT" eu coloquei 2 no caso >> mais >> Lfvl>> simples porém tem alguns caso onde tenho até 4 "JOINS" na mesma >> tabela o >> Lfvl>> problema é que isso no Postgres roda em segundos como coloquei >> no 1 email >> Lfvl>> 15 segundos contra 30 minutos do Firebird >> >> Lfvl>> Eu estou achando que isso é um bug no Firebird. >> Lfvl>> Em quinta-feira, 15 de maio de 2025 às 08:19:17 BRT, Armando >> Boza >> Lfvl>> Gonçalves via lista <[email protected]> escreveu: >> Lfvl>> >> Lfvl>> Bom dia, 2 LEFT JOIN para a mesma tabela? >> >> Lfvl>> Eu já tive problemas de desempenho com left join e acabei >> resolvendo com >> Lfvl>> UNION, separei os selects e ficou bem rápido. >> >> Lfvl>> Faz um teste. >> >> Lfvl>> Em 15/05/2025 07:09, Luciano franca via lista escreveu: >> Acredito que encontrei o problema e não sei como resolver mesmo sem CTE >> não adianta >> basta acessar a mesma tabela duas vezes para o Firebird se perder >> se fizer algo simples como isso já vai dar problemas veja >> >> Select >> Cp.codigo, Cp.nome >> From cadastro_pessoas cp >> left join venda v on (v.cod_cliente = cp.codigo) Left join venda v2 on >> (v2.cod_cliente = cp.codigo) se eu comentar essa segunda junção é >> excecutado em 1 segundo >> Group by 1, 2 Lf>> Lfvl> ______________________________________________ Lfvl> FireBase-BR (www.firebase.com.br [4]) - Hospedado em www.locador.com.br Lfvl> [5] Lfvl> Para saber como gerenciar/excluir seu cadastro na lista, use: Lfvl> http://www.firebase.com.br/fb/artigo.php?id=1107 Lfvl> Para consultar mensagens antigas: Lfvl> http://www.firebase.com.br/pesquisa_lista.html Lfvl> ______________________________________________ Lfvl> FireBase-BR (www.firebase.com.br [4]) - Hospedado em www.locador.com.br Lfvl> [5] Lfvl> Para saber como gerenciar/excluir seu cadastro na lista, use: Lfvl> http://www.firebase.com.br/fb/artigo.php?id=1107 Lfvl> Para consultar mensagens antigas: Lfvl> http://www.firebase.com.br/pesquisa_lista.html Lfvl> ______________________________________________ Lfvl> FireBase-BR (www.firebase.com.br [4]) - Hospedado em www.locador.com.br Lfvl> [5] Lfvl> Para saber como gerenciar/excluir seu cadastro na lista, use: Lfvl> http://www.firebase.com.br/fb/artigo.php?id=1107 Lfvl> Para consultar mensagens antigas: Lfvl> http://www.firebase.com.br/pesquisa_lista.html Lfvl> Links: Lfvl> ------ Lfvl> [1] http://www.firebase.com.br/guiafb5.php Lfvl> [2] http://www.FireBase.com.br Lfvl> [3] http://www.firebirdnews.org Lfvl> [4] http://www.firebase.com.br Lfvl> [5] http://www.locador.com.br Lfvl> ______________________________________________ Lfvl> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br Lfvl> Para saber como gerenciar/excluir seu cadastro na lista, use: Lfvl> http://www.firebase.com.br/fb/artigo.php?id=1107 Lfvl> Para consultar mensagens antigas: http://www.firebase.com.br/pesquisa_lista.html Lfvl> Lfvl> ______________________________________________ Lfvl> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br Lfvl> Para saber como gerenciar/excluir seu cadastro na lista, use: Lfvl> http://www.firebase.com.br/fb/artigo.php?id=1107 Lfvl> Para consultar mensagens antigas: http://www.firebase.com.br/pesquisa_lista.html ______________________________________________ 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