PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

PostgreSQL:existe vs junção esquerda


Bem, para cada linha em "grupos", o postgresql está fazendo uma varredura completa de products_categories, o que não é bom. Não necessariamente um problema de configuração, mas talvez a consulta possa ser declarada sem aninhar subconsultas como essa?
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

Também faz products_categories ter um índice em product_id ?