Не существует «лучшего» или «худшего» типа соединения. Они имеют разное значение и должны использоваться в зависимости от этого.
В вашем случае, вы , вероятно , не имеют сотрудников с не work_log (ни одной строки в этой таблице), так LEFT JOIN
и JOIN
будут эквивалентны в результатах. Однако, если бы у вас была такая вещь (новый сотрудник без зарегистрированного журнала work_log), то JOIN
этот сотрудник пропустил бы пустошь, в то время как при левом соединении (первая таблица которого сотрудники) показывали бы все из них, и при наличии нуля в полях из work_log не совпадают.
Опять же, производительность является второстепенной вещью для правильности запроса. Некоторые люди говорят, что вы не должны использовать LEFT JOIN
s. Это правда, что LEFT JOIN заставляет оптимизатор выполнить запрос в одном конкретном порядке, предотвращая некоторые оптимизации (переупорядочение таблиц) в некоторых случаях. Вот один пример . Но вы не должны выбирать одно из другого, если правильность / смысл жертвуются, так как ВНУТРЕННЕЕ СОЕДИНЕНИЕ не хуже по своей сути. Остальные обычные оптимизации применяются как обычно.
Таким образом, не используйте, LEFT JOIN
если вы действительно имеете в виду INNER JOIN
.
В MySQL CROSS JOIN
, INNER JOIN
и JOIN
одни и те же. В стандартном и семантическом CROSS JOIN
выражениях a - это INNER JOIN
без ON
условия, поэтому вы получаете каждую комбинацию строк между таблицами.
У вас есть примеры всех семантических типов объединения в Википедии . На практике в MySQL мы склонны писать только JOIN
и LEFT JOIN
.
JOIN
подразумевает неквалифицированностьINNER JOIN
Какое соединение лучше, если все они дают одинаковый результат?
В дополнение к предыдущему ответу, насколько я знаю, MySQL оптимизирован, чтобы иметь такую же производительность.
С хорошими индексами, например, предложение
JOIN
vsLEFT JOIN
+WHERE
для фильтрации будет то же самое. Оптимизация против человеческого чтения имеет смысл для больших запросов с большим количеством объединений.Использование хороших индексов и кеша важнее.
Вы можете прочитать хорошее объяснение процесса оптимизации здесь:
Процесс оптимизации запроса : запрос часто может выполняться разными способами и давать один и тот же результат. Задача оптимизатора - найти лучший вариант.
источник