Очень медленный запрос, чтобы найти все записи без отношения - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь найти все 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 Ответ

0 голосов
/ 27 июня 2018

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

Alter table orders add index(user_id)

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