ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Melhorar query no Sql Server

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
tiagorogers1
Aprendiz
Aprendiz


Registrado: Sexta-Feira, 17 de Julho de 2015
Mensagens: 215
Localização: Recife

MensagemEnviada: Seg Mar 27, 2017 9:53 pm    Assunto: Melhorar query no Sql Server Responder com Citação

tenho a seguinte query
Código:
select
    produto,descricao,estoque_calculado,REFERENCIA,custo_bruto,custo_liquido,IPI_compra,frete,outras,ult_compra,
    DESP_FINAN,CTFIXO,REF_ORIGINAL,NCM,
    OUTRAS_C,MARCA_ID,FORNE_ID, ATIVO, abc,
[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12]
from
(
    select MONTH(DATA) as MES,i.Quantidade,i.produto,i.descricao,e.estoque_calculado,
    L.REFERENCIA, L.custo_bruto,L.custo_liquido, L.IPI_compra,
    L.frete,L.outras,L.ult_compra,L.DESP_FINAN,L.CTFIXO,L.REF_ORIGINAL,L.NCM,
    L.OUTRAS_C, L.MARCA_ID, L.FORNE_ID, L.ATIVO, L.abc
    from ITENS_PED_ORCAMENTO I
    INNER JOIN ESTOQUE_ATUAL E
    ON I.produto = E.ESTOQUE_ID
    INNER JOIN estoque L
    ON i.PRODUTO = L.ESTOQUE_ID
   
    where
        i.DATA between '2017-01-01' and '2017-03-31' and
        i.ABERTO = 'NAO'


) as t
pivot
(
    sum(Quantidade) for MES in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12] )
) as p


são poucos registros, menos de 2 mil mas demorou quase 2 minutos, tem como melhorar esse select ? acredito que foi o join com as tabelas Estoque e estoque_atual que são responsáveis por esse aumento
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Mar 28, 2017 9:32 am    Assunto: Responder com Citação

Bom dia,

Experimente fazer primeiro o Pivot, deixando os Joins para o final, para ver se melhora o desempenho:

Código:
with CTE_Pivot as
(
    select
        produto, descricao, [1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12]
    from
    (
        select MONTH(DATA) as MES, i.Quantidade, i.produto, i.descricao,
        from ITENS_PED_ORCAMENTO I
        where
            i.DATA between '2017-01-01' and '2017-03-31' and
            i.ABERTO = 'NAO'
    ) as t
    pivot
    (
        sum(Quantidade) for MES in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12] )
    ) as p
)

select
    c.produto, c.descricao,
    e.estoque_calculado,
    L.REFERENCIA, L.custo_bruto, L.custo_liquido, L.IPI_compra,
    L.frete, L.outras, L.ult_compra, L.DESP_FINAN, L.CTFIXO, L.REF_ORIGINAL, L.NCM,
    L.OUTRAS_C, L.MARCA_ID, L.FORNE_ID, L.ATIVO, L.abc,
    c.[1],c.[2],c.[3],c.[4],c.[5],c.[6],c.[7],c.[8],c.[9],c.[10],c.[11],c.[12]
from CTE_Pivot as c
INNER JOIN ESTOQUE_ATUAL E
    ON c.produto = E.ESTOQUE_ID
INNER JOIN estoque L
    ON c.PRODUTO = L.ESTOQUE_ID


Espero que ajude

_________________
Assinatura: http://www.imoveisemexposicao.com.br/imoveis-alugar-guarulhos!gopouva-residencial-apartamento
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
tiagorogers1
Aprendiz
Aprendiz


Registrado: Sexta-Feira, 17 de Julho de 2015
Mensagens: 215
Localização: Recife

MensagemEnviada: Ter Mar 28, 2017 10:08 am    Assunto: Responder com Citação

Obrigado IMEx reduziu pra 19 segundos,
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB