PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Left Join Aggregati laterali e di array

Come ha già commentato @Denis:non c'è bisogno di LATERAL .Inoltre, la tua sottoquery ha selezionato la colonna sbagliata. Funziona:

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.

Prestazioni e test

Per quanto riguarda la scansione sequenziale che ne segue, menzioni:se esegui una query sull'intera tabella, una scansione sequenziale è spesso più veloce . Dipende dalla versione che stai utilizzando, dal tuo hardware, dalle tue impostazioni e dalle statistiche di cardinalità e distribuzione dei tuoi dati. Sperimenta con WHERE selettivo clausole come WHERE t1.t1_id < 1000 o WHERE t1.t1_id = 1000 e combinare con impostazioni del pianificatore per conoscere le scelte:

SET enable_seqscan = off;
SET enable_indexscan = off;

Per ripristinare:

RESET enable_seqscan;
RESET enable_indexscan;

Solo nella tua sessione locale, intendiamoci! Questa risposta correlata su dba.SE ha più istruzioni.
Ovviamente, anche la tua impostazione potrebbe essere disattivata: