Obrigado aos amigos Euler e Fabrizio.

 

Vou fazer alguns testes.

Realmente, não tinha pensando na utilização de uma trigger ou rule para
fazer a contagem. Vou fazer alguns testes para ver como vai ficar.

 

Quanto ao resultado, acabou de ficar pronto o ANALYZE.

 

----------------------------------------------------------------------------
----

 GroupAggregate  (cost=15214945.32..17137926.62 rows=4605944 width=76)
(actual time=5220913.166..5548633.536 rows=45426667 loops=1)

   ->  Sort  (cost=15214945.32..15330093.90 rows=46059432 width=76) (actual
time=5220913.148..5399270.222 rows=46059431 loops=1)

         Sort Key: data, produto, cliente, ("substring"((fone)::text, 0,
13)), grupo, gerador, subproduto, simples, alterado, possivel, negado, novo,
finalizado

         Sort Method:  external merge  Disk: 4556616kB

         ->  Seq Scan on importação (cost=0.00..1480786.06 rows=46059432
width=76) (actual time=0.030..100216.580 rows=46059431 loops=1) 

Filter: (((gerador)::text = ‘NACIONAL’::text) AND (simples = 'N'::bpchar))

 Total runtime: 5561850.965 ms

(7 rows)

----------------------------------------------------------------------------
----

 

Gerei toda a saída do explain analyze para um arquivo, caso achem
necessário, posso colocar em anexo esse arquivo.

 

Agradeço a ajuda de todos.

Atenciosamente.

José Augusto Pereira.

 

 

 

 

Caro José Augusto,

Além das recomendações do colega Euler, você poderia pensar em refatorar [1]
a tua estrutura de dados... pelo que entendi você tem uma tabela que contém
toda tua movimentação e gera uma secundária com o resumo das movimentações
(me corrija se estiver errado) então você cria esse *resumo* executando um
SELECT que tem alto custo para o banco de dados...

Você poderia ao invés de executar esse SELECT, que é custoso, criar uma
trigger na tabela das movimentações que atualiza a tabela do resumo das
movimentações quanto houver INSERT/UPDATE/DELETE... 

Com a aplicação do *database refactoring* [1] denominado *Introduce
Read-Only Table* você consegue rapidamente montar essa estrutura, pois a
tabela *read-only* você já implementa, então falta somente a trigger para
atualização dos dados.

Existe também a possibilidade de utilizar Rules [2] ao invés de triggers...
inclusive esses dias um colega postou na lista uma dica interessante do uso
de rules [3]

Espero ter ajudado.



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

Responder a