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

PostgreSQL:existiert vs. linker Join

Nun, für jede Zeile in "Gruppen" führt postgresql einen vollständigen Scan von products_categories durch, was nicht gut ist. Nicht unbedingt ein Konfigurationsproblem, aber vielleicht könnte die Abfrage ohne solche verschachtelten Unterabfragen angegeben werden?

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

Auch products_categories haben einen Index auf product_id ?