Olá Rauni,

Um jeito de ensinar SQL para o otimizador do Postgres é o seguinte:

create index tmp2 on hotel_description_translation (id,lang);

create temporary table x as
select d.description_type_id, t.lang, count( t.id ) as count 
from hotel_description_translation as t 
group by t.id, t.lang;

select d.description_type_id,t.lang 
from x t
inner join hotel_description_translation d ON ( d.id = t.id );

Ou seja: crie uma tabela temporária contendo as totalizações, usando apenas
a tabela filha.
Essa consulta será simples o suficiente para o otimizador do Postgres usar o
índice e montar os totais rapidamente (a consulta completa pelo visto é
complicada demais para ele...).
Depois, sobre uma tabela muito menor, mesmo sem usar índices, o Hash Join do
Postgres vai ter um desempenho mais aceitável.

Não tenho tuas tabelas, mas com duas minhas de volume e proporção similares
a resposta foi 5 vezes mais rápida.

Atenciosamente,

Mozart Hasse


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

Responder a