sql >> Databasteknik >  >> RDS >> PostgreSQL

Vänster Gå med i laterala och arrayaggregat

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

-SQL-fiol.

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:




  1. Fel antal eller typer av argument i anrop till proceduren med användning av zxJDBC

  2. En situation där ActiveRecord och SQL inte returnerar samma resultat på grund av att okänt OID behandlas som String

  3. Syntaxmarkering i Oracle-webbläsaren ungefär som SQL Server Management Studio

  4. Hämtar ändringar från tabellen med ElasticSearch JDBC river