Очень медленный запрос, чтобы найти все записи без отношения

0

Я пытаюсь найти всех 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+. Есть ли более эффективный способ сделать это?

  • 1
    Вы пробовали индексировать?
Теги:
left-join
relationship
not-exists

1 ответ

1
Лучший ответ

Вам нужно ограничить ваш подзапрос, чтобы посмотреть только user_id. Также убедитесь, что user_id проиндексирован.

Alter table orders add index(user_id)

Select * from users where id NOT IN(select user_id from 
orders)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню