Jump to content


Photo

Melhorar Performance Consulta


  • Faça o login para participar
Nenhuma resposta neste tópico

#1 inavoig

inavoig

    Novato no fórum

  • Usuários
  • 1 posts
  • Sexo:Não informado

Posted 09/08/2013, 10:47

Olá, bom dia.

Estou com problemas em uma consulta que está muito lenta. Gostaria de ajuda para melhorar a performance desta
consulta.

Segue abaixo minha consulta:
======================================= SELECT PRINCIPAL ===================================
/* Parte de uma tabela de com itens (tabela com bastante registros) e faz um inner join com uma viewer para retornar a movimentação dos ultimos 3 meses */

SELECT
     tmp.tmp_id_produ_refer,
     mov.qt_movim,
     mov.date_part
FROM
    tmp_dados AS tmp
INNER JOIN
    vrj.view_retorna_qtde_vendida_ultimos_tres_meses AS mov
ON
    mov.id_unida = p_id_unida
AND
    mov.id_produ_refer = tmp.tmp_id_produ_refer;

======================================= VIEWER PARA RETORNAR MOVIMENTACAO ===================================
/*Viewer para retornar as movimentacoes, essas viewer faz consulta em uma tabela com uma massa de informações muito grande, fazendo inner join com tabelas que também tem bastante conteúdo */

CREATE OR REPLACE VIEW vrj.view_retorna_qtde_vendida_ultimos_tres_meses AS
SELECT
    doc.id_unida,
    mov.id_produ_refer,
    SUM(mov.qt_movim) AS qt_movim,
    EXTRACT(MONTH FROM (mov.dt_movim :: DATE))
FROM
    vrj.tb_movim_locac AS mov /*Tabela de movimentações, tabela com muitos registros */
INNER JOIN
   vrj.tb_item_doc_fiscal AS ite /*Tabela com muitos registros */
ON
   ite.id_item_doc_fiscal = mov.id_item_doc_fiscal
INNER JOIN
   vrj.tb_doc_fiscal AS doc /*Tabela com muitos registros */
ON
   ite.id_doc_fiscal = doc.id_doc_fiscal
INNER JOIN
   vrj.tb_tipo_fatur AS tft /*Tabela com poucos registros */
ON
   tft.id_tipo_fatur = doc.id_tipo_fatur
AND
   tft.cd_tipo_fatur = 'VD' -- Fixo para trazer somente NF de venda
WHERE
   doc.dt_cancel is null
AND
   DATE(mov.dt_movim) >= (date_trunc('MONTH',CURRENT_DATE-interval '3 MONTH')::date)
GROUP BY
   doc.id_unida,
   mov.id_produ_refer,
   EXTRACT(MONTH FROM (mov.dt_movim :: DATE));


Se possivel gostária que fizessem uma análise dessa proceudure e me dissesem o que acham, se tem como melhorar,
se o conceito aplicado está bom. Gostaria de dicas, novas tecnologias, coisas do tipo...

Obrigado desde já




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq