Vâng, đối với mỗi hàng trong "nhóm", postgresql đang quét toàn bộ sản phẩm_categories, điều này không tốt. Không nhất thiết là vấn đề cấu hình, nhưng có lẽ truy vấn có thể được nêu mà không cần lồng các truy vấn con như vậy?
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
products_categories
cũng vậy có chỉ mục trên product_id
?