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á