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

PostgreSQL :existe vs jointure gauche

Eh bien, pour chaque ligne de "groupes", postgresql effectue une analyse complète de products_categories, ce qui n'est pas bon. Pas nécessairement un problème de configuration, mais peut-être que la requête pourrait être formulée sans imbriquer des sous-requêtes comme ça ?

SELECT count(DISTINCT "groups".id) AS count_all 
FROM "groups"
WHERE exists(
    select 1 from products p where groups.id = p.group_id
             join products_categories pc on pc.product_id = p.id
    where pc.category_id in (2,3)
    ) and groups.id <> 3

Fait également products_categories avoir un index sur product_id ?