SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 22.08.2011 15:10:54

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

оптимизация запроса с not in

Доброго времени суток!

Дано: таблица талонов request, и имеется таблица request_event куда занесены те события, которые происходили с талонами, ключевые поля: request_id (связка с id в таблице request),event_type_id (тип события, которое произошло с талоном).

Задача: получить id тех талонов, с которыми не происходило событий с кодом 7 и 33.

Запрос, который делает то, что нужно:

select * from request where id not in (select request_id from request_event where event_type_id in (7,33) );


Работает не слишком быстро.

Подскажите пожалуйста, можно ли оптимизировать (если можно, то как, можно ли join'ом?) и нужно ли (в том контексте, что mysql не очень оптимизирует подзапросы)?

Отредактированно deadka (22.08.2011 15:11:25)


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#2 22.08.2011 19:17:17

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: оптимизация запроса с not in

Попробуй так

select * from request r
left join request_event e on(r.id=e.request_id and (e.event_type_id=7 or e.event_type_id=33))
where e.event_type_id is null;


О неэффективной работе конструкции WHERE IN я уже описывал тут http://sqlinfo.ru/forum/viewtopic.php?id=4406

Отредактированно evgeny (22.08.2011 19:22:00)

Неактивен

 

#3 27.08.2011 10:12:14

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: оптимизация запроса с not in

evgeny, спасибо!


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson