Jak již poznamenal @Denis:není potřeba LATERAL
.Váš poddotaz také vybral nesprávný sloupec. Funguje to:
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);
Výkon a testování
Ohledně následného sekvenčního skenování, které zmiňujete:Pokud se dotazujete na celou tabulku, sekvenční skenování je často rychlejší . Záleží na verzi, kterou používáte, vašem hardwaru, vašem nastavení a statistikách mohutností a distribuce vašich dat. Experimentujte se selektivním WHERE
klauzule jako WHERE t1.t1_id < 1000
nebo WHERE t1.t1_id = 1000
a kombinovat s nastavením plánovače
se dozvíte o možnostech:
SET enable_seqscan = off;
SET enable_indexscan = off;
Postup resetování:
RESET enable_seqscan;
RESET enable_indexscan;
Pouze ve vaší místní relaci, pozor! Tato související odpověď na dba.SE
obsahuje další pokyny.
Vaše nastavení může být samozřejmě také vypnuto: