Oi Pablo,

É pouco provável que o Postgres faça um DISTINCT eficiente, o que recomendo 
é
indexar sua tabela de td_dado_pessoa pela dt_ultima_alteracao mais a chave 
(e talvez os campos do select)
e então no WHERE colocar algo como:

select ...from
tb_dado_ore as a
inner join
th_ore_uf as b on
a.co_ore=b.co_ore
inner join
th_dado_pessoa as c on
--*** faça isso com todas as referências à tabela de pessoas
c.co_dado_pessoa = b.co_secretario and c.dt_ultima_alteracao = (select 
max(c2.dt_ultima_alteracao) from th.dado_pessoa as c2 where 
c2.co_dado_pessoa=c.co_dado_pessoa)
--***
inner join...

Com isso você não precisa de ORDER BY nem de DISTINCT, facilitando 
consideravelmente a vida do otimizador.
Você precisará testar com os índices que indiquei para ver o que o 
otimizador faz. Se a distribuição dos teus dados não ajudar o otimizador, 
posta a estrutura e o EXPLAIN que a gente vê o que dá para fazer.

Atenciosamente,

Mozart Hasse 


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

Responder a