[firebase-br] Consulta demorando 2 horas como resolvo.
Sandro Souza
escovadordebits em gmail.com
Qui Jun 2 11:08:13 -03 2011
Bom dia/tarde Luciano.
Realmente é uma excelente questão. E também confesso que estou curioso a
esse respeito.
Só por desencargo de consciência, você poderia testar o seguinte SQL?
select cm.codigo, cm.codigo_barras, cm.codigo_fabricante, cm.cod_fornecedor,
cm.mercadoria, cf.fornecedor,
Max(Case When(Gp.filial = 1) Then Gp.preco_g_vista End) As Preco_AS,
Max(Case When(Gp.filial = 2) Then Gp.preco_g_vista End) As Preco_MT
from cadastro_mercadorias cm
inner join cadastro_fornecedor cf on (cf.codigo = cm.cod_fornecedor)
Inner Join grade_produtos GP on (Gp.cod_produto = CM.codigo)
Where exists (select *count(*)* from cadastro_mercadorias cc
where cc.codigo_barras = cm.codigo_barras
group by 1 having *count(*)* > 1)
group by 1, 2, 3, 4, 5, 6
order by cm.codigo_barras
Em 2 de junho de 2011 10:00, Luciano franca <luapfirebird em yahoo.com.br>escreveu:
> Bom dia pessoal eu tenho uma consulta aqui que está demorando 2:01:00
> já rodei a mesma consulta varias vezes e sempre a mesma media de tempo.
>
> Eu já executei em computadores diferentes para ver se tinha alguma
> problema relacionado a maquina mais sempre acontece a mesma coisa.
> Rodei em maquinas como Windows 7 x64 x32 Windows Xp, todas elas eram Core
> 2 Duo 3 GHZ com 4 GB de Ram, já fiz backup e Restore mudei a configuração
> de Page Size para todas a opções possiveis, revi todos os indices envolvidos
> e esta tudo certo.
> Testei a ultima versão do Firebird 2x depois desistalei e coloquei o
> Firebird 2.5 testei tanto o Firebird x32 como x64
>
> Por ultimo instalei o PostGreSQL v.9 x32 nas mesmas maquinas que tenho o
> firebird criei a mesma estrutura do banco, com os mesmos PKs, FKs e indices
> coloquei todos os dados do Banco Firebird no PostGreSQL e para minha
> surpresa o PostGreSQL demora em media apenas 00:19:00 para executar a mesma
> consulta com o mesmo numero de linhas.
>
> As Tabelas são
> cadastro_fornecedor 2022 Registros
> cadastro_mercadorias 41788 Registros
> grade_produtos 95020 Registros
>
> A consulta SQL é
>
> select cm.codigo, cm.codigo_barras, cm.codigo_fabricante,
> cm.cod_fornecedor, cm.mercadoria, cf.fornecedor,
> Max(Case When(Gp.filial = 1) Then Gp.preco_g_vista End) As Preco_AS,
> Max(Case When(Gp.filial = 2) Then Gp.preco_g_vista End) As Preco_MT
> from cadastro_mercadorias cm
> inner join cadastro_fornecedor cf on (cf.codigo = cm.cod_fornecedor)
> Inner Join grade_produtos GP on (Gp.cod_produto = CM.codigo)
> Where exists (select cc.codigo_barras from cadastro_mercadorias cc
> where cc.codigo_barras = cm.codigo_barras
> group by 1 having count(cc.codigo_barras) > 1)
> group by 1, 2, 3, 4, 5, 6
> order by cm.codigo_barras
>
> Acho o Firebird não consegue trabalhar muito bem com Sub-Select usando
> Exists.
>
>
>
> ______________________________________________
> 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://firebase.com.br/pesquisa
>
Mais detalhes sobre a lista de discussão lista