Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

victorpavia

performance de consulta

Recommended Posts

Pessoal,

 

Esta consulta esta bastante lenta no meu banco.

Quando removo a tabela trelsld a consulta roda rapido.

Gostaria, se possível, de alguma sugestão para melhorar a performance:

 

 

 select saldo+quantidade as saldoatual,case when valoranterior is null then 0 else VALORANTERIOR end as valoranterior,*
     from (select case when saldoprev is null then 0 else saldoprev end as saldo,
     *,case when valorantigo is null then 0 else valorantigo end as antigo
     from (
     select distinct tt.nseqitmmov,tt.idprd,codigoreduzido,nomefantasia,preco1 as aprazo,
     case when qtdeentrada is null then tt.quantidade * TUND.FATORCONVERSAO else tr.qtdeentrada END as quantidade,
     case when tr.custoreposicaoa is null then tp.CUSTOREPOSICAO else tr.CUSTOREPOSICAOA end as precocheio,
     preco1,margembrutalucro,tp.custounitario,
     case when prdcesta is null then 'NÃO' else prdcesta end as prdcesta
    
     ,case when prdexterno is null then 'NÃO' else prdexterno end as prdexterno
     ,(select top 1 valoranterior from  historicoprecosprodutos where idprd = tp.idprd
     and idreajustepreco <= (select top 1 idreajustepreco from historicoprecosprodutos where idprd = tp.idprd order by idreajustepreco desc)order by idreajustepreco desc) as valoranterior
     ,(select top 1 novovalor from  historicoprecosprodutos where idprd = tp.idprd
     and idreajustepreco <= (select top 1 idreajustepreco from historicoprecosprodutos where idprd = tp.idprd order by idreajustepreco desc)order by idreajustepreco desc) as valorantigo
     ,prodpdv,libsaldo,codcfo, SALDOANTERIOR as saldoprev,tpcp.matlimp,ttb.VALOR as IPI
     from tmov t WITH (NOLOCK)
     inner join titmmov tt (NOLOCK)  on (tt.idmov = t.idmov)
     left join TUND (NOLOCK) on (TUND.CODUND = TT.CODUND)
     left join TRELSLD tr on (tr.IDMOV = tt.IDMOV and tt.NSEQITMMOV = tr.NSEQITMMOV)
     inner join tprd tp (NOLOCK)  on (tp.idprd = tt.idprd)
     left join tprdcompl tpcp (NOLOCK)  on (tp.idprd = tpcp.idprd)
     left join ttrbprd ttp (NOLOCK)  on(ttp.idprd = tp.idprd)
     left join TTRBMOV ttb (NOLOCK) on (ttb.IDMOV = tt.IDMOV and ttb.NSEQITMMOV = tt.NSEQITMMOV)
     where substring(t.codtmv,1,1) = '1' and ttb.codtrb = 'IPI'   
     and t.numeromov = '000002470'   
      and t.codfilial = '1'    
     )TGERAL )TGERAL2 order by nseqitmmov

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando removo a tabela trelsld a consulta roda rapido.

 

verifique se o jojn desta tabela usa índice

 

outro problema pode ser estes select como coluna.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

 

Na verdade, quando uso algum campo da tabela trelsld no select, a consulta fica carregada.

Ou seja ao referenciar qualquer coisa nessa tabela a consulta fica pesada.

 

Desculpe minha falta de experiência, mas como verifico se o join usa indice? Se eu te passar o plano de execução adianta?

Compartilhar este post


Link para o post
Compartilhar em outros sites

... mas como verifico se o join usa indice? ...

 

Verifique se a tabela tem índices e seu relacionamento com outras tabelas. (PK x FK)

 

 

Se eu te passar o plano de execução adianta?

 

Nunca vi a Plan de SqlSever mas publica aí não deve ser muito diferente do Oracle

 

 

Sabe se as estatíscas de Banco estão atualizadas ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nunca vi a Plan de SqlSever mas publica aí não deve ser muito diferente do Oracle

Ah, eh sim!!!

 

No plano de execução, salve ele em XML e se possivel poste ele.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Costumo fazer tabula rasa nestes casos.

Refazer do zero.

 

1-Listar que dados se quer

2- Como se quer estes dados

3-Em que tabelas/colunas estão as informações

4-Começa a resolver o problema por partes, e vai se montando a consulta maior

5-Em alguns casos o uso de FUNCTIONS revolve o problema de queries complexas pois se garante um query otimizada

6-Em alguns casos a query é lenta, não tem solução, para um relatório rápido se faz uso de uma tabela agregadora, alimenta-se esta tabela numa hora de máquina ociosa

 

 

Muitas vezes tentar melhorar algo que não está bom não adianta muita coisa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.