PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Left Join Lateral e agregados de array


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: