sql >> Database teknologi >  >> RDS >> PostgreSQL

Venstre Forbind laterale og array-aggregater

Som @Denis allerede har kommenteret:intet behov for LATERAL .Din underforespørgsel valgte også den forkerte kolonne. Dette virker:

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 violin.

Ydeevne og test

Med hensyn til den efterfølgende sekventielle scanning nævner du:Hvis du forespørger i hele tabellen, er en sekventiel scanning ofte hurtigere . Afhænger af den version du kører, din hardware, dine indstillinger og statistik over kardinaliteter og distribution af dine data. Eksperimenter med selektiv WHERE klausuler som WHERE t1.t1_id < 1000 eller WHERE t1.t1_id = 1000 og kombiner med planlægningsindstillinger for at lære om valg:

SET enable_seqscan = off;
SET enable_indexscan = off;

Sådan nulstilles:

RESET enable_seqscan;
RESET enable_indexscan;

Kun i din lokale session, vel at mærke! Dette relaterede svar på dba.SE har flere instruktioner.
Selvfølgelig kan din indstilling også være slået fra:




  1. Hibernate-værktøjer kan ikke hente indeksoplysninger fra Postgres-tabeller

  2. 6 sjove fakta om Microsoft, som du sandsynligvis ikke kender!

  3. Sådan implementeres Chamilo MariaDB-databasen for høj tilgængelighed

  4. Forespørgselstabel med et og-tegn i navnet