PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Left Join Lateral- und Array-Aggregate

Wie @Denis bereits kommentierte:keine Notwendigkeit für LATERAL . Außerdem hat Ihre Unterabfrage die falsche Spalte ausgewählt. Das funktioniert:

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);

-SQL-Geige.

Leistung und Tests

Zum anschließenden sequentiellen Scan erwähnen Sie:Wenn Sie die ganze Tabelle abfragen, ist ein sequentieller Scan oft schneller . Hängt von der Version ab, die Sie verwenden, Ihrer Hardware, Ihren Einstellungen und Statistiken zu Kardinalitäten und der Verteilung Ihrer Daten. Experimentieren Sie mit selektivem WHERE Klauseln wie WHERE t1.t1_id < 1000 oder WHERE t1.t1_id = 1000 und mit Planereinstellungen kombinieren Informationen zu Auswahlmöglichkeiten:

SET enable_seqscan = off;
SET enable_indexscan = off;

Zurücksetzen:

RESET enable_seqscan;
RESET enable_indexscan;

Nur in Ihrer lokalen Session, wohlgemerkt! Diese verwandte Antwort auf dba.SE enthält weitere Anweisungen.
Natürlich kann Ihre Einstellung auch deaktiviert sein: