с заказами, их там на порядок больше, чем самих продуктов
Есть пользователи, их человек 10
Я хочу получить товары, которые покупал пользователь под номером 1.
Если я делаю запрос
select products.id, products.name from products join orders on orders.product_id=products.id and orders.user_id=1
Я получаю товары но с дублями, так как один товар заказывали по несколько раз. В этом случае нам приходится читать все заказы пользователя по указанным товарам.
Если я делаю запрос с distinct, то всё верно, получаем уникальные товары купленные пользователем:
select distinct on (products.id) products.id, products.name from products join orders on orders.product_id=products.id and orders.user_id=1
Но вопрос, база читает из таблицы заказов по одному заказу к каждой паре товар-пользователь, или так же все заказы как в первом запрос и только потом отфильтровывает через distinct?
Постройте план и увидите. Да, если id - первичный ключ в products, то можете просто сделать group by products.id вместо distinct
Обсуждают сегодня