PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Left Join Latéral et agrégats de tableau

Comme @Denis l'a déjà commenté :pas besoin de LATERAL .En outre, votre sous-requête a sélectionné la mauvaise colonne. Cela fonctionne :

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

-violon SQL.

Performances et tests

Concernant l'analyse séquentielle qui s'ensuit, vous mentionnez :Si vous interrogez toute la table, une analyse séquentielle est souvent plus rapide . Cela dépend de la version que vous utilisez, de votre matériel, de vos paramètres et des statistiques de cardinalités et de la distribution de vos données. Expérimentez avec WHERE sélectif des clauses comme WHERE t1.t1_id < 1000 ou WHERE t1.t1_id = 1000 et combiner avec paramètres du planificateur pour en savoir plus sur les choix :

SET enable_seqscan = off;
SET enable_indexscan = off;

Pour réinitialiser :

RESET enable_seqscan;
RESET enable_indexscan;

Seulement dans votre session locale, attention ! Cette réponse connexe sur dba.SE contient plus d'instructions.
Bien sûr, votre paramètre peut également être désactivé :