SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 02.08.2016 12:35:22

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 411

Время выполнения запросов вместе (IN, =, JOIN) и по отдельности.

Прошу помощи.
Есть два запроса (относительно сложные, поэтому не привожу)
SQL 1

SELECT * FROM (...) WHERE t1.parent_id = 123;
Выполняется за 7 мс.
SQL 2
SELECT parent_id FROM (...) WHERE ...;  
Возвращает одно значение 123.
Выполняется за 400 мс.
Если их объединить
SELECT * FROM (...) WHERE t1.parent_id IN (SELECT parent_id FROM (...) WHERE ...);
то время выполнения возрастает в десятки тысяч раз!!!
Если объединить через JOIN то время выполнения 5 сек. Вроде понятно, в результатах есть избыточность.
Если через "=", то 400 мс.
SELECT * FROM (...) WHERE t1.parent_id = (SELECT parent_id FROM (...) WHERE ...);

Почему IN так долго выполняется?

Отредактированно klow (02.08.2016 12:36:18)

Неактивен

 

#2 02.08.2016 13:23:09

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

Re: Время выполнения запросов вместе (IN, =, JOIN) и по отдельности.

в ранних версиях in подзапросы всегда выполняются как зависимые, т.е. для каждой строки внешнего запроса
решение:
1. переписать через join
2. обновиться до mariadb >= 5.3 или mysql >= 5.6

Неактивен

 

#3 02.08.2016 13:59:46

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 411

Re: Время выполнения запросов вместе (IN, =, JOIN) и по отдельности.

Спасибо!

Неактивен

 

Board footer

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