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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Последовательность left и inner join в запросе 
:(
    Опции темы
maxipub
Дата 25.6.2018, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Здравствуйте.

Правильно ли я понимаю, что данные два запроса будут равнозначными:

Код

SELECT * FROM t1 
INNER JOIN t2 ON cond
INNER JOIN t3 ON cond
INNER JOIN t4 ON cond
LEFT JOIN t5 ON cond


Код

SELECT * FROM t1 
LEFT JOIN t5 ON cond
INNER JOIN t2 ON cond
INNER JOIN t3 ON cond
INNER JOIN t4 ON cond


?
PM MAIL   Вверх
Akina
Дата 25.6.2018, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 453



И да, и нет. Результат будет одинаковый, а планы выполнения (и соответственно время и использованные ресурсы) - разные.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
maxipub
Дата 25.6.2018, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Akina, насколько я знаю:

1) джойны обрабатываются в той же последовательности, в которой указываются в запросе;
2) сначала рекомендуют ставить легкие таблицы, тяжелые - в конец.

Это верно?

А собственно сам вопрос, состоял как раз в результате. Т.е. LEFT и INNER JOIN-ы можно как угодно менять местами (ну понятно, что t5 не ставить на место t1 в примере, это уже банально будет не LEFT), на результат это ни как не повлияет?
PM MAIL   Вверх
eclipsle88
Дата 19.7.2018, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не, результат может и не совпасть, т.к. там левое соединение - заполняет сначала левую, потом правую и нулями дополняет. А если в самом начале сделать лефт, то оно и потянет все эти нули вниз за собой, надеюсь понел
PM MAIL   Вверх
Akina
Дата 20.7.2018, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 453



Цитата(maxipub @  25.6.2018,  18:42 Найти цитируемый пост)
джойны обрабатываются в той же последовательности, в которой указываются в запросе;

Не "джойны обрабатываются", а "таблицы сканируются". И только при условии наличия хотя бы одного стороннего (LEFT/RIGHT) связывания - если все связывания внутренние (INNER), оптимизатор сам решает, в каком порядке сканировать таблицы (однако можно дополнительной инструкцией STRAIGHT_JOIN запретить ему эту самодеятельность).

Цитата(maxipub @  25.6.2018,  18:42 Найти цитируемый пост)
сначала рекомендуют ставить легкие таблицы, тяжелые - в конец

Нет. В начало следует помещать наиболее селективные таблицы. Т.е. те, для которых условие связывания и/или отбора оставляет минимальное количество промежуточных наборов данных. И далеко не всегда это самые маленькие таблицы.

Цитата(eclipsle88 @  19.7.2018,  23:28 Найти цитируемый пост)
результат может и не совпасть, т.к. там левое соединение - заполняет сначала левую, потом правую и нулями дополняет. А если в самом начале сделать лефт, то оно и потянет все эти нули вниз за собой

Бред сивой кобылы. Это "добавление нулей" (на самом деле NULL) определяется ТОЛЬКО условиями связывания и никак не зависит от порядка.
Не веришь? Попробуй создать пример, когда изменение порядка таблиц без изменения условий связывания изменит результат выборки... когда надоест - скажешь.



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




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


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

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