Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с запросом NOT IN 
V
    Опции темы
DenisSh
Дата 5.1.2009, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 16.9.2008
Где: Taganrog

Репутация: нет
Всего: 2



Помогите с запросом, допустим есть две таблицы (таблицы вымышленные, логику не ищите), база MySQL

stuff
id    name   clientid index_date

managers
id  managerid  clientid status

так вот суть в том что мне надо вытянуть из таблицы managers данные в которых clientid не подходит для некоторых значений, это трудно объяснить но вот что я сделал и это работает

Код

SELECT m.id  FROM managers m
                      WHERE 
                                    m.clientid NOT IN(
                                    SELECT clientid FROM stuff
                                    WHERE index_date >= SUBDATE(timestamp(now()), INTERVAL 7 DAY)
                                    UNION
                                    SELECT clientid FROM managers WHERE status = "skipped"
                                    GROUP BY clientid
                                    )


проблема в том что за счет NOT IN наверно запрос выполняется ну оооччччень медленно при том что в таблице managers около 1000 записей.
можно ли как то заменить NOT IN или еще что нибудь сделать чтобы ускорить процесс выборки?

Спасибо.





PM MAIL ICQ   Вверх
Бонифаций
Дата 6.1.2009, 05:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: нет
Всего: 40



несколько вопросов, которые не понятны из запроса
  •  зачем group by clientid в подзапросе?
  •  зачем вторая часть union в подзапросе. она же тоже про managers?
       не проще ли было написать 
    Код

    select id from managers where clientid not in ( select clientid from stuff......) and status <> 'skipped'



Это сообщение отредактировал(а) Бонифаций - 6.1.2009, 05:41


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
DenisSh
Дата 6.1.2009, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 16.9.2008
Где: Taganrog

Репутация: нет
Всего: 2



clientid это не уникальное значение.

Цитата

[*] зачем group by clientid в подзапросе?


необязательная вещь, использовалась для исключения дубликатов

Код

select id from managers where clientid not in ( select clientid from stuff......) and status <> 'skipped'


в том то и дело что clientid это не уникальные значения и если в каком то случае в таблице managers например clientid = 1 и status = 'skipped' то все остальные случаи где clietnid = 1 должны быть пропущены уже независимо от статуса.

надеюсь так понятней.

Это сообщение отредактировал(а) DenisSh - 6.1.2009, 11:17
PM MAIL ICQ   Вверх
Бонифаций
Дата 6.1.2009, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: нет
Всего: 40



Цитата(DenisSh @ 6.1.2009,  11:15)
clientid это не уникальное значение.

Цитата

[*] зачем group by clientid в подзапросе?


необязательная вещь, использовалась для исключения дубликатов

В этом нет необходимости. Union вернет только уникальные значения..

Добавлено через 2 минуты и 12 секунд
explain покажите Вашего запроса..


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
DenisSh
Дата 6.1.2009, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 16.9.2008
Где: Taganrog

Репутация: нет
Всего: 2



Цитата(Бонифаций @ 6.1.2009,  13:01)
Цитата(DenisSh @ 6.1.2009,  11:15)
clientid это не уникальное значение.

Цитата

[*] зачем group by clientid в подзапросе?


необязательная вещь, использовалась для исключения дубликатов

В этом нет необходимости. Union вернет только уникальные значения..

Добавлено @ 13:03
explain покажите Вашего запроса..

о! точно! explain! все спасибо, в таблицах индексов не хватало...добавил....теперь почти как часы работает. smile 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0416 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.