Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Почему inner join внутри подзапроса так сильно замедляет весь запрос? / 2 сообщений из 2, страница 1 из 1
02.09.2013, 00:14:41
    #38383718
Jacobian
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему inner join внутри подзапроса так сильно замедляет весь запрос?
Привет всем! Подскажите, почему INNER JOIN внутри подзапроса может так сильно замедлять весь запрос? Сейчас запрос выглядит так:

SELECT o.id_field, attr_73206_ AS attr_73270_
FROM object_73130_ f1
LEFT OUTER JOIN (
SELECT id_field, attr_73206_ FROM (
SELECT m.id_field, t0.attr_73102_ AS attr_73206_ FROM object_73200_ o
INNER JOIN master_slave m ON (m.id_object = 73130 OR m.id_object = 73290) AND (m.id_master = 73200 OR m.id_master = 73354) AND m.id_slave_field = o.id
INNER JOIN object_73101_ t0 ON t0.id = o.attr_73206_
ORDER BY o.id_order
) AS o GROUP BY o.id_field
) AS o ON f1.id = o.id_field

На сравнительно небольших таблицах, не превышающих 2 тыс. записей он выполняется за 12 секунд. Сам подзапрос выполняется за доли секунды. И что самое интересное, если переписать запрос и сделать так:

SELECT t0.attr_73102_ AS attr_73270_
FROM object_73130_ f1
LEFT OUTER JOIN (
SELECT id_field, attr_73206_ FROM (
SELECT m.id_field, attr_73206_ FROM object_73200_ o
INNER JOIN master_slave m ON (m.id_object = 73130 OR m.id_object = 73290) AND (m.id_master = 73200 OR m.id_master = 73354) AND m.id_slave_field = o.id
ORDER BY o.id_order
) AS o GROUP BY o.id_field
) AS o ON f1.id = o.id_field
LEFT JOIN object_73101_ t0 ON t0.id = o.attr_73206_

то он выполняется за доли секунды. То есть все дело в INNER JOIN внутри подзапроса. Так вот, почему он так сильно влияет на весь запрос, увеличивая время исполнения с долей секунды до 12 секунд?
...
Рейтинг: 0 / 0
02.09.2013, 08:24:18
    #38383785
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему inner join внутри подзапроса так сильно замедляет весь запрос?
Jacobian, а планы, планы-то где?
Без них можно только предполагать, что в первом случае таблица, которую вы лефтджойните ("о", внешняя), получается большой, а во втором - маленькой. А поскольку это временная таблица, то время её левого присоединения может очень сильно зависеть от кол-ва записей в ней.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Почему inner join внутри подзапроса так сильно замедляет весь запрос? / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]