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
