Ir para conteúdo

POWERED BY:

Arquivado

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

victorpavia

query muito pesada (lentidão no servidor)

Recommended Posts

Pessoal,

Essa query que eu criei esta dando muita carga no servidor. Ocupado 100% de CPU.

As subquerys internas são as reponsáveis pela carga. Não sei como resolver de outra forma. Se alguém tiver sugestões???



select distinct codfilial,NUMEROMOV,dataemissao,DATALANCAMENTO,CODTMV,CODIGOREDUZIDO,

DESCRICAO,NUMEROCCF,descontoitem,acrescimoitem,descontoNota,acrescimoNota, SITTRIBUTARIAPIS,basePIS,baseCofins,

SITTRIBUTARIACOFINS,CODNAT,DESCRICAOCOMPLETA

,sum(vtotalvendaitem) as vtotalvendaitem




from (


select distinct tm.codfilial,tm.NUMEROMOV,tm.dataemissao,tm.DATALANCAMENTO,tm.CODTMV,tp.CODIGOREDUZIDO,

tp.DESCRICAO,tp.NUMEROCCF,TTM.valordesc as descontoitem,TTM.valordesp as acrescimoitem,tm.VALORDESC as descontoNota

,tm.VALORDESP as acrescimoNota

,(ttm.QUANTIDADE * ttm.PRECOUNITARIO)

- case when ttm.VALORDESC is null then 0 else ttm.VALORDESC end

as vtotalvendaitem


,(select BASEDECALCULO from TTRBMOV where IDMOV = ttm.IDMOV and NSEQITMMOV =

ttm.NSEQITMMOV and CODTRB = 'pis') as basePIS


,(select SITTRIBUTARIA from TTRBMOV where IDMOV = ttm.IDMOV and NSEQITMMOV =

ttm.NSEQITMMOV and CODTRB = 'pis') as sittributariaPIS


,(select valor from TTRBMOV where IDMOV = ttm.IDMOV and NSEQITMMOV =

ttm.NSEQITMMOV and CODTRB = 'pis') as valorPis


,(select BASEDECALCULO from TTRBMOV where IDMOV = ttm.IDMOV and NSEQITMMOV =

ttm.NSEQITMMOV and CODTRB = 'cofins') as baseCofins


,(select SITTRIBUTARIA from TTRBMOV where IDMOV = ttm.IDMOV and NSEQITMMOV =

ttm.NSEQITMMOV and CODTRB = 'cofins') as sittributariaCOFINS


,(select VALOR from TTRBMOV where IDMOV = ttm.IDMOV and NSEQITMMOV =

ttm.NSEQITMMOV and CODTRB = 'cofins') as valorCofins


,d.CODNAT,d.DESCRICAOCOMPLETA


from TMOV tm


inner join TITMMOV ttm on (ttm.IDMOV = tm.IDMOV)

inner join TPRD tp on (tp.IDPRD = ttm.IDPRD)

inner join TPRDFISCAL tpf on (tpf.IDPRD = tp.idprd)

inner join DNATUREZA d on (d.IDNAT = ttm.IDNAT)

left join TTRBMOV ttb on (ttb.IDMOV = ttm.IDMOV and ttb.NSEQITMMOV = ttm.NSEQITMMOV)

where

tm.DATALANCAMENTO >= '02/01/2013'

and tm.datalancamento <= '02/01/2013'

and tm.STATUS <> 'C' and (d.CODnat like '5%')-- and tm.SERIE <> 'ECF'


)T1


group by

codfilial,NUMEROMOV,dataemissao,DATALANCAMENTO,CODTMV,CODIGOREDUZIDO,

DESCRICAO,NUMEROCCF,descontoitem,acrescimoitem,descontoNota,acrescimoNota, SITTRIBUTARIAPIS,basePIS,baseCofins,

SITTRIBUTARIACOFINS,CODNAT,DESCRICAOCOMPLETA


order by DATALANCAMENTO, NUMEROMOV

Compartilhar este post


Link para o post
Compartilhar em outros sites

esses distinct's são essenciais na consulta?

Compartilhar este post


Link para o post
Compartilhar em outros sites

vc ta usando eles pra que então? rs

Compartilhar este post


Link para o post
Compartilhar em outros sites

usei o distinct para evitar registros repetidos. Não sei se é necessário usar isso, porém creio que são as subquerys que estão pesando.

Não tenho experiência em SQL Server.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A tabela TTRBMOV está sendo lida trocentas vezes, não daria para faer apenas uma leitura e tratar as condições por CASE ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A tabela TTRBMOV está sendo lida trocentas vezes, não daria para faer apenas uma leitura e tratar as condições por CASE ?

´Tenta primeiro usar uma temporaria para colocar somente os dados que precisa desta tabela....

Qual a versao do SQL? Consegue gerar um plano de execucao?

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

essa tabela ta normalizada?

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.