Zoals @Denis al opmerkte:geen behoefte aan LATERAL
.Ook heeft uw subquery de verkeerde kolom geselecteerd. Dit werkt:
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);
Prestaties en testen
Betreffende de daaropvolgende sequentiële scan vermeldt u:Als u de hele tabel bevraagt, is een sequentiële scan vaak sneller . Hangt af van de versie die u gebruikt, uw hardware, uw instellingen en statistieken van kardinaliteiten en distributie van uw gegevens. Experimenteer met selectieve WHERE
clausules zoals WHERE t1.t1_id < 1000
of WHERE t1.t1_id = 1000
en combineer met planner-instellingen
voor meer informatie over keuzes:
SET enable_seqscan = off;
SET enable_indexscan = off;
Om te resetten:
RESET enable_seqscan;
RESET enable_indexscan;
Alleen in uw lokale sessie, let wel! Dit gerelateerde antwoord op dba.SE
heeft meer instructies.
Natuurlijk kan uw instelling ook uitgeschakeld zijn: