Jak już skomentował @Denis:nie ma potrzeby stosowania LATERAL
.Ponadto Twoje podzapytanie wybrało niewłaściwą kolumnę. To działa:
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);
Wydajność i testowanie
Odnośnie późniejszego skanowania sekwencyjnego, o którym wspomniałeś:Jeśli wysyłasz zapytanie do całej tabeli, skanowanie sekwencyjne jest często szybsze . Zależy od używanej wersji, sprzętu, ustawień i statystyk liczności oraz dystrybucji danych. Eksperymentuj z selektywnym WHERE
klauzule takie jak WHERE t1.t1_id < 1000
lub WHERE t1.t1_id = 1000
i połącz z ustawieniami planera
aby dowiedzieć się o możliwościach wyboru:
SET enable_seqscan = off;
SET enable_indexscan = off;
Aby zresetować:
RESET enable_seqscan;
RESET enable_indexscan;
Tylko podczas sesji lokalnej, pamiętaj! Ta powiązana odpowiedź na dba.SE
zawiera więcej instrukcji.
Oczywiście Twoje ustawienie też może być wyłączone: