Pessoal,

só postando na lista a conclusão a que cheguei pela thread. Como eu suspeitei, 
o problema é que os filtros (where) para a tabela principal da view (nfe) não 
eram suficientes para indicar um índice. Assim, como teria que se verificar 
todas as linhas mesmo, não se usava índice pra nada. Resumi entao toda a where 
para um unico campo em nfe, que alimento via trigger, que me diz se o registro 
é alvo ou nao (se tem email a ser enviado). Dai criei um indice neste campo. E 
segue abaixo o resultado. Percebam que agora o otimizado usa os indices de 
chave primária nas maiores tabelas. Fábio, quanto ao UNION, creio que 
resolvesse também, apesar de que ainda assim, o otimizador não usaria um indice 
em nfe, pois testei explanar o select apenas nesta tabela, e o resultado foi 
seqscan. Bom, mais uma vez, obrigado a todos. Creio que foi esclarecedor pra 
todos.

1) select na view

select * from view_fila_nfe x
where x.id_empresa = 1
and x.email_pendente


2) explain

QUERY PLAN
Nested Loop Left Join  (cost=0.00..70.49 rows=1 width=737)
  Join Filter: (ctg.id = nfe.id_contingencia)
  ->  Nested Loop Left Join  (cost=0.00..69.18 rows=1 width=729)
        ->  Nested Loop Left Join  (cost=0.00..60.90 rows=1 width=717)
              ->  Nested Loop Left Join  (cost=0.00..52.61 rows=1 width=705)
                    ->  Nested Loop Left Join  (cost=0.00..44.33 rows=1 
width=683)
                          ->  Nested Loop  (cost=0.00..36.05 rows=1 width=661)
                                Join Filter: (nfe.id_nat_operacao = nop1.id)
                                ->  Nested Loop  (cost=0.00..34.56 rows=1 
width=487)
                                      ->  Nested Loop Left Join  
(cost=0.00..26.27 rows=1 width=442)
                                            ->  Nested Loop  (cost=0.00..17.81 
rows=1 width=423)
                                                  Join Filter: (nfe.id_fila = 
f.id)
                                                  ->  Nested Loop Left Join  
(cost=0.00..16.76 rows=1 width=345)
                                                        ->  Index Scan using 
nfe_idx14 on nfe  (cost=0.00..8.47 rows=1 width=327)
                                                              Index Cond: 
((id_empresa = 1) AND (email_pendente = true))
                                                              Filter: 
email_pendente
                                                        ->  Index Scan using 
compras_pkey on compras c  (cost=0.00..8.29 rows=1 width=26)
                                                              Index Cond: (id = 
nfe.id_compra)
                                                  ->  Seq Scan on nfe_filas f  
(cost=0.00..1.02 rows=2 width=80)
                                            ->  Index Scan using vendas_pkey on 
vendas v  (cost=0.00..8.45 rows=1 width=27)
                                                  Index Cond: (id = 
nfe.id_venda)
                                      ->  Index Scan using terceiros_pkey on 
terceiros t1  (cost=0.00..8.27 rows=1 width=49)
                                            Index Cond: (id = nfe.id_terceiro)
                                ->  Seq Scan on naturezas_operacoes nop1  
(cost=0.00..1.22 rows=22 width=182)
                          ->  Index Scan using terceiros_pkey on terceiros t2  
(cost=0.00..8.27 rows=1 width=30)
                                Index Cond: (id = nfe.id_func_emissao)
                    ->  Index Scan using terceiros_pkey on terceiros t3  
(cost=0.00..8.27 rows=1 width=30)
                          Index Cond: (id = nfe.id_func_cancelamento)
              ->  Index Scan using romaneios_pkey on romaneios r1  
(cost=0.00..8.27 rows=1 width=20)
                    Index Cond: (id = v.id_romaneio)
        ->  Index Scan using romaneios_pkey on romaneios r2  (cost=0.00..8.27 
rows=1 width=20)
              Index Cond: (id = c.id_romaneio_devolucao)
  ->  Seq Scan on nfe_contingencia ctg  (cost=0.00..1.02 rows=2 width=12)

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

Responder a