Som @Denis redan har kommenterat:inget behov av LATERAL
. Dessutom valde din underfråga fel kolumn. Detta fungerar:
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);
Prestanda och testning
Angående den efterföljande sekventiella genomsökningen nämner du:Om du frågar hela tabellen är en sekventiell genomsökning ofta snabbare . Beror på vilken version du kör, din hårdvara, dina inställningar och statistik över kardinaliteter och distribution av dina data. Experimentera med selektiv WHERE
satser som WHERE t1.t1_id < 1000
eller WHERE t1.t1_id = 1000
och kombinera med planerarinställningar
för att lära dig om val:
SET enable_seqscan = off;
SET enable_indexscan = off;
Så här återställer du:
RESET enable_seqscan;
RESET enable_indexscan;
Bara i din lokala session, märk väl! Detta relaterade svar på dba.SE
har fler instruktioner.
Självklart kan din inställning också vara avstängd: