SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 11.11.2010 20:31:00

iiiymaxep
Участник
Зарегистрирован: 11.11.2010
Сообщений: 4

Вложенный SELECT

Всем привет!

Есть два простеньких запроса:

1. SELECT ... WHERE ... IN (SELECT...);
2. SELECT ... WHERE ... IN (N1, N2, ..., Nm)
.
В первом запросе SELECT в скобках возвращает ту же последовательность, что и в скобках второго запроса (Ni подставляю руками), НО разница между временами выполнения колоссальная! Объясните, пожалуйста, в чем разница.

Спасибо.

Неактивен

 

#2 11.11.2010 21:48:01

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Вложенный SELECT

Разница в том, что в первом случае подзапрос считается зависимым от основного
и выполняется на каждую строку первого запроса. Вы можете убедиться в этом,
если допишете EXPLAIN в начале каждого из запросов — тогда MySQL выдаст план
выполнения запросов.

Для того, чтобы первый запрос работал быстро, достаточно переписать его в виде
объединения:
SELECT ... FROM tablename JOIN ( подзапрос ) sub ON условие связи.
Или, если подзапрос — это выборка из одной таблицы, то
FROM tablename JOIN subtable ON условие связи.

Неактивен

 

#3 11.11.2010 22:03:58

iiiymaxep
Участник
Зарегистрирован: 11.11.2010
Сообщений: 4

Re: Вложенный SELECT

Вот как smile

Спасибо, paulus!

PS: С меня пиво!

Неактивен

 

Board footer

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