SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 31.07.2016 21:35:23

Juriy
Участник
Зарегистрирован: 31.07.2016
Сообщений: 2

Механизм работы вложенного запроса через SELECT ..... FROM.... WHERE var IN(SELECT.....)

Здравствуйте! У меня такой вопрос по MySQL
Есть работающее представление с вложенным запросом:

CREATE OR REPLACE
DEFINER=CURRENT_USER
SQL SECURITY DEFINER
VIEW manager1
AS SELECT * FROM products
WHERE id_catalog IN (SELECT id_catalog FROM catalogs
WHERE name = 'Видеоадаптеры' OR name = 'Материнские платы') ORDER BY name;

скажите пожалуйста, вложенный запрос в конструкции IN выполнится единожды заполнив список значениями, или же выполнытся будет несколько раз? (id_catalog является первичным ключем)
И вот что еще интересно - я новичок, мне не совсем понятен механизм работы SELECT в целом - как и в каких ситуациях выполняется проход по таблицам. Вот к примеру, каков будет механизм работы внешнего и вложенного запроса из приведенного выше представления? Мне кажется (но я наверное ошибаюсь), что сначала выполнится вложенный запрос и вставит свои значения в список IN, а потом внешний запрос будет последовательно просматривать каждую строку таблицы products и сравнивать(искать) id_catalog равный значению из IN без повторного выполнения вложенного запроса.

Проясните пожалуйста ситуацию. С уважением, Юрий!

Неактивен

 

#2 31.07.2016 23:16:40

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Механизм работы вложенного запроса через SELECT ..... FROM.... WHERE var IN(SELECT.....)

зависит от версии
в ранних версиях вложенный запрос выполнялся для каждой строки внешнего запроса
начиная с mariabd 5.3 исправлено; в mysql, емнип, с 5.6

о том как оптимизатор обрабатывает вложенные запросы хорошо изложено тут

Неактивен

 

#3 01.08.2016 00:26:19

Juriy
Участник
Зарегистрирован: 31.07.2016
Сообщений: 2

Re: Механизм работы вложенного запроса через SELECT ..... FROM.... WHERE var IN(SELECT.....)

vasya написал:

зависит от версии
в ранних версиях вложенный запрос выполнялся для каждой строки внешнего запроса
начиная с mariabd 5.3 исправлено; в mysql, емнип, с 5.6

о том как оптимизатор обрабатывает вложенные запросы хорошо изложено тут

Спасибо!

Неактивен

 

Board footer

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