Som @Denis allerede har kommenteret:intet behov for LATERAL
.Din underforespørgsel valgte også den forkerte kolonne. Dette virker:
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);
Ydeevne og test
Med hensyn til den efterfølgende sekventielle scanning nævner du:Hvis du forespørger i hele tabellen, er en sekventiel scanning ofte hurtigere . Afhænger af den version du kører, din hardware, dine indstillinger og statistik over kardinaliteter og distribution af dine data. Eksperimenter med selektiv WHERE
klausuler som WHERE t1.t1_id < 1000
eller WHERE t1.t1_id = 1000
og kombiner med planlægningsindstillinger
for at lære om valg:
SET enable_seqscan = off;
SET enable_indexscan = off;
Sådan nulstilles:
RESET enable_seqscan;
RESET enable_indexscan;
Kun i din lokale session, vel at mærke! Dette relaterede svar på dba.SE
har flere instruktioner.
Selvfølgelig kan din indstilling også være slået fra: