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
