Я пытаюсь найти всех users
которых нет orders
.
До сих пор я пробовал следующее:
select * from 'users' where not exists
(select * from 'orders' where 'users'.'id' = 'orders'.'user_id')
Я также пробовал следующее:
select users.*, count(distinct orders.reference) as orders_count from 'users'
left join 'orders' on 'users'.'id' = 'orders'.'user_id'
group by 'users'.'id' having orders_count = 0
Тем не менее, оба очень медленные запросы. Около 5000 клиентов и 30 заказов 000+. Есть ли более эффективный способ сделать это?
Вам нужно ограничить ваш подзапрос, чтобы посмотреть только user_id. Также убедитесь, что user_id проиндексирован.
Alter table orders add index(user_id)
Select * from users where id NOT IN(select user_id from
orders)