[firebase-br] RES: RES: RES: RES: RES: Ajuda com select

rodrigo firebase em dominioinf.com.br
Quinta Março 18 09:04:29 -03 2021


Bom dia!

Não sei se é isso que está pedindo

Plan
PLAN JOIN (JOIN (I INDEX (ITENSFAT_ID_ATUALIZA), P INDEX (PEDIDOSFAT_CODIGO, PEDIDOSFAT_ID_EMPRESA)), TB INDEX (IDX_CLIENTES_CODCLIENTE, IDX_CLIENTES_IDEMPRESA))

------ Performance info ------
Prepare time = 31ms
Execute time = 19s 906ms
Avg fetch time = 19.906,00 ms
Current memory = 12.714.304
Max memory = 12.735.520
Memory buffers = 2.048
Reads from disk to cache = 49.297
Writes from cache to disk = 0
Fetches from cache = 9.302.507

Valeu

Enviado do Email para Windows 10

De: Carlos H. Cantu via lista
Enviado:quarta-feira, 17 de março de 2021 21:54
Para: FireBase
Cc:Carlos H. Cantu
Assunto: Re: [firebase-br] RES: RES: RES: RES: Ajuda com select

Pra falar mais alguma coisa precisaria saber o PLAN e também a
seletividade dos indices das tabelas envolvidas. Talvez o otimizador
esteja falhando na hora de escolher o melhor plan.

[]s
Carlos H. Cantu
eBook Guia de Migração para o FB 3 - www.firebase.com.br/guiafb3.php
www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br

r> Boa tarde Cantu,

r> Com o select sugerido, fica mais de 1 hora e não passa.

r> Com o select que estou usando chega a 20 segundos, mas ainda acho que é bastante tempo.

r> Grato pela ajuda.

r> Enviado do Email para Windows 10

r> De: Carlos H. Cantu via lista
r> Enviado:quarta-feira, 17 de março de 2021 16:36
r> Para: FireBase
r> Cc:Carlos H. Cantu
r> Assunto: Re: [firebase-br] RES: RES: RES: Ajuda com select

r> Vc recalculou as estatisticas dos indices depois de importar os
r> dados?

r> Outra coisa:

r> SELECT COUNT(I.ID)
r> FROM itensfat i
r> LEFT JOIN pedidosfat p ON (P.CODIGO = I.CODIGO and I.ID_EMPRESA='114028')
r> LEFT JOIN CLIENTES AS TB ON (TB.CODCLIENTE = P.NUMCLIENTE and TB.ID_EMPRESA='114028' )
r> WHERE P.ID_EMPRESA='114028' AND TB.CODVENDEDOR = 2 AND I.ID_ATUALIZA>0

r> Você tem condições no WHERE em cima de campos da tabela
r> P e TB, portanto, não faz sentido usar LEFT JOIN nesses casos.

r> Experimente:

r> SELECT COUNT(I.ID)
r> FROM itensfat i
r> JOIN pedidosfat p ON (P.CODIGO = I.CODIGO and I.ID_EMPRESA=P.ID_EMPRESA)
r> JOIN CLIENTES AS TB ON (TB.CODCLIENTE = P.NUMCLIENTE and TB.ID_EMPRESA=P.ID_EMPRESA)
r> WHERE P.ID_EMPRESA = '114028' AND TB.CODVENDEDOR = 2 AND I.ID_ATUALIZA>0

r> e responda mostrando o tempo que demorou e qual foi o PLAN gerado. Não
r> esqueça de recalcular as estatisticas dos indices antes de testar.

r> PS: O count do Firebird é mais lento "por natureza", pois o FB usa a
r> arquitetura de Versioning, o que obriga o "count" a visitar todos os
r> registros encontrados pra saber se eles estão ou não visíveis para a
r> transação associada ao select.


r> []s
r> Carlos H. Cantu
r> eBook Guia de Migração para o FB 3 - www.firebase.com.br/guiafb3.php
r> www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br

rvl>> Boa tarde,

rvl>> Puxei essa tabela do mysql, que esta online, e converti ela em
rvl>> firebird para ficar em meu servidor.

rvl>> O dados foram recém importados.

rvl>> Tem índice em todos os campos.

rvl>> "P.CODIGO = I.CODIGO and I.ID_EMPRESA='114028'  não consegui
rvl>> identificar o erro aqui, a chave estrangeira é o P.CODIGO.

rvl>> Pior que no servidor online com mysql esta rodando esse mesmo
rvl>> sql sem índice nenhum criado com 1 segundo.

rvl>> Grato



rvl>> Enviado do Email para Windows 10

rvl>> De: SERGIO LOPES via lista
rvl>> Enviado:quarta-feira, 17 de março de 2021 15:34
rvl>> Para: Odir Rodrigues de Oliveira via lista
rvl>> Cc:SERGIO LOPES
rvl>> Assunto: Re: [firebase-br] RES: RES: Ajuda com select

rvl>>  Boa tarde,não sei se entendi muito bem mas...
rvl>> o problema nao esta aqui "P.CODIGO = I.CODIGO and
rvl>> I.ID_EMPRESA='114028'  "?  veja q nessa estrutura deveria ter uma
rvl>> chave estrangeira para pedidofat de forma q iria consultar apenas
rvl>> itens desse de cada pedido especificamente e da forma q está cada
rvl>> pedido esta comparando com todos os registros da tabela itensfat...
rvl>> penso q deveria sera p.codigo = i."chave_estrangeira_pedidofat" and ..
rvl>> I.ID_EMPRESA='114028' esta parte aqui poderia ser considerado
rvl>> redundante ?? pq a empresa nao ja identifica no pedidofat?

rvl>> é isso ou estou enganado... a questão dos indices devem ser levando em consideração claro.
rvl>> espero ter ajudado.

rvl>>     Em quarta-feira, 17 de março de 2021 14:29:01 BRT, Odir
rvl>> Rodrigues de Oliveira via lista <lista em firebase.com.br> escreveu:
rvl>>  
rvl>>  Nas suas tabelas existem Índices para os campos CODVENDEDOR e ID_ATUALIZA?
rvl>> Caso negativo experimente criar.

rvl>> Odir Rodrigues de Oliveira
rvl>> Clipp-net Informática
rvl>> São Carlos - SP
rvl>> Fone: +55 16 3307-7369
rvl>> Cel: +55 16 98137-2103
rvl>> Site: www.clippnet.com.br


rvl>> -----Mensagem original-----
rvl>> De: lista [mailto:lista-bounces em firebase.com.br] Em nome de Gustavo Novaes
rvl>> via lista
rvl>> Enviada em: quarta-feira, 17 de março de 2021 08:35
rvl>> Para: FireBase
rvl>> Cc: Gustavo Novaes
rvl>> Assunto: Re: [firebase-br] RES: Ajuda com select

rvl>> Manda a estrutura das tabelas pra gente conhecer melhor. Talvez o uso de
rvl>> CTE ajude. Ontem assisti uns vídeos no youtube de um cara chamado Edson
rvl>> Gregório. Num deles falava sobre performance.

rvl>> *Gustavo Novaes *




rvl>> Em qua., 17 de mar. de 2021 às 08:27, rodrigo via lista <
rvl>> lista em firebase.com.br> escreveu:

>>> Bom dia Gustavo. Obrigado pela resposta,
>>>
>>> Mesmo resultado.
>>>
>>>
>>>
>>> Enviado do Email para Windows 10
>>>
>>> De: Gustavo Novaes via lista
>>> Enviado:quarta-feira, 17 de março de 2021 08:04
>>> Para: FireBase
>>> Cc:Gustavo Novaes
>>> Assunto: Re: [firebase-br] Ajuda com select
>>>
>>> Bom dia,
>>> Minha sugestão, embora não tenha testado.
>>>
>>> SELECT COUNT(I.ID <http://i.id/>) FROM ITENSFAT ITENS
>>> INNER JOIN PEDIDOSFAT PEDIDOS ON (PEDIDOS..CODIGO = ITENS.CODIGO and
>>> ITENS.ID_EMPRESA='114028')
>>> INNER JOIN CLIENTES AS CLIENTES ON (CLIENTES.CODCLIENTE =
>>> PEDIDOS.NUMCLIENTE AND CLIENTES.CODVENDEDOR = 2)  and
>>> TB.ID_EMPRESA='114028'
>>> )
>>> WHERE PEDIDOS.ID_EMPRESA='114028' AND AND ITENS.ID_ATUALIZA>0
>>>
>>> Gosto do uso de CTEs mas não domino ainda.
>>>
>>> *Gustavo Novaes *
>>>
>>>
>>>
>>>
>>> Em qua., 17 de mar. de 2021 às 07:04, João Denóis via lista <
>>> lista em firebase.com.br> escreveu:
>>>
>>> > Bom dia,
>>> > A tabela Itensfat tem mais de 1.500.000 registros, e você passa ela em
rvl>> um
>>> > left, já pensou em passar com INNER? Existe a possibilidade de criar um
>>> > index neste código tbm.
>>> >
>>> > Em ter., 16 de mar. de 2021 às 20:36, rodrigo via lista <
>>> > lista em firebase.com.br> escreveu:
>>> >
>>> > > Boa noite!
>>> > >
>>> > > Tenho um select cujas tabelas
>>> > > Itensfat tem mais de 1.500.000 registros
>>> > > Pedidosfat mais de 400.000 registros
>>> > > E clientes mais de 80.000 registros
>>> > >
>>> > > Tenho esse select
>>> > >
>>> > > SELECT COUNT(I.ID) FROM itensfat i
>>> > > LEFT JOIN pedidosfat p ON (P.CODIGO = I.CODIGO and
>>> I.ID_EMPRESA='114028')
>>> > > LEFT JOIN CLIENTES AS TB ON (TB.CODCLIENTE = P.NUMCLIENTE and
>>> > > TB.ID_EMPRESA='114028' )
>>> > > WHERE P.ID_EMPRESA='114028' AND TB.CODVENDEDOR = 2 AND I.ID_ATUALIZA>0
>>> > >
>>> > > Com esse retorno:
>>> > >
>>> > > PLAN JOIN (JOIN (I INDEX (ITENSFAT_ID_ATUALIZA), P INDEX
>>> > > (PEDIDOSFAT_CODIGO, PEDIDOSFAT_ID_EMPRESA)), TB INDEX
>>> > > (IDX_CLIENTES_CODCLIENTE, IDX_CLIENTES_IDEMPRESA))
>>> > >
>>> > > Prepare: 47 ms  Execute: 50 s 157 ms  Fetch: 50 s 157 ms
>>> > >
>>> > > Se altero para
>>> > > SELECT COUNT(I.ID) FROM pedidosfat p
>>> > > LEFT JOIN itensfat i ON (P.CODIGO = I.CODIGO and
rvl>> I.ID_EMPRESA='114028')
>>> > > LEFT JOIN CLIENTES AS TB ON (TB.CODCLIENTE = P.NUMCLIENTE and
>>> > > TB.ID_EMPRESA='114028' )
>>> > > WHERE P.ID_EMPRESA='114028' AND TB.CODVENDEDOR = 2 AND I.ID_ATUALIZA>0
>>> > >
>>> > > Demora mais de 7 minutos
>>> > >
>>> > > Alguem tem alguma dica de como posso melhorar a performance desse
>>> select?
>>> > >
>>> > > Grato


r> ______________________________________________
r> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
r> Para saber como gerenciar/excluir seu cadastro na lista, use:
r> http://www.firebase.com.br/fb/artigo.php?id=1107
r> Para consultar mensagens antigas:
r> 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



-- 
Este email foi escaneado pelo Avast antivírus.
https://www.avast.com/antivirus


Mais detalhes sobre a lista de discussão lista