Como @Denis já comentou:não há necessidade de
LATERAL
.Além disso, sua subconsulta selecionou a coluna errada. Isso funciona:SELECT t1.t1_id, t1.t1_data, t2_ids
FROM t1
LEFT JOIN (
SELECT t1_id, array_agg(t2_id) AS t2_ids
FROM t1_t2_rel
GROUP BY 1
) sub USING (t1_id);
-SQL fiddle.
Desempenho e testes
Com relação à varredura sequencial, você menciona:Se você consultar a tabela inteira, uma varredura sequencial geralmente é mais rápida . Depende da versão que você está executando, seu hardware, suas configurações e estatísticas de cardinalidades e distribuição de seus dados. Experimente com
WHERE
seletivo cláusulas como WHERE t1.t1_id < 1000
ou WHERE t1.t1_id = 1000
e combine com as configurações do planejador
para aprender sobre escolhas:SET enable_seqscan = off;
SET enable_indexscan = off;
Reiniciar:
RESET enable_seqscan;
RESET enable_indexscan;
Apenas em sua sessão local, lembre-se! Esta resposta relacionada em dba.SE tem mais instruções.
É claro que sua configuração também pode estar desativada: