Em 12/09/2012 às 14:39 horas, [email protected] escreveu:
 
(...)
FROM nfe
   LEFT JOIN compras c ON c.id = nfe.id_compra
   LEFT JOIN vendas v ON v.id = nfe.id_venda
   LEFT JOIN terceiros t1 ON nfe.id_terceiro = t1.id
   LEFT JOIN naturezas_operacoes nop1 ON nfe.id_nat_operacao = nop1.id
   JOIN nfe_filas f ON f.id = nfe.id_fila
   LEFT JOIN terceiros t2 ON t2.id = nfe.id_func_emissao
   LEFT JOIN terceiros t3 ON t3.id = nfe.id_func_cancelamento
   LEFT JOIN romaneios r1 ON r1.id = v.id_romaneio
   LEFT JOIN romaneios r2 ON r2.id = c.id_romaneio_devolucao
   LEFT JOIN nfe_contingencia ctg ON ctg.id = nfe.id_contingencia;
Amigão, com esses LEFT JOINs aí e logo no meio um JOIN, impossível otimizar.
Mudar a ordem dos JOINs pode ajudar.
 
Quando se usa LEFT JOIN, o otimizador não tem escolha: ele tem que emitir *pelo menos* um resultado da tabela da esquerda e, quando houver, algum resultado da tabela da direita, repetindo os resultados da esquerda - resultado - seqscan.
 
Note que você, pra piorar, tem um monte de condições no meio do SELECT, que obrigou o planejador a fazer filter no meio do plano.
 
Tente reescrever sua consulta trocando a ordem dos JOINs. Se possível, use INNER JOIN onde puder.
Sobre os filtros, com tabelas associadas e mais JOINs é capaz do plano melhorar muito.
 
Isso é um caso pro Osvaldo Kussama.
 
[]s
__________________________________
Flavio Henrique A. Gurgel
Líder de Projetos Especiais
Consultoria, Projetos & Treinamentos 4LINUX
Tel1: +55-11.2125-4747 ou 2125-4748
www.4linux.com.br
email: [email protected]
______________________________
FREE SOFTWARE SOLUTIONS
 

_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a