Задать вопрос
@synapse_people

Как ведет себя JOIN & WHERE?

Здравствуйте
Допустим есть запрос условно:
select ... from t0
inner join t1 on t1.col1=t1.col0
inner join t2 on t2.col2=t1.col1
inner join tN on tN.col2=t2.col1
//ну вы поняли, каскадно джойнится таблица А ДАЛЕЕ ИДЕТ
WHERE t2.colN IS TRUE

Теперь вопрос,
сервер сначала сджойнит все данные всех таблиц t0 t1 t2 t...N ИЛИ он дойдет до джойна t2 и увидит строгое WHERE, которое связано с этой таблицей и выгребет только те строки, которые соответствуют и ON И WHERE?

То есть вопрос, сначала обрабатываются все JOIN-ON, а затем WHERE
или учитывается WHERE еще на этапе JOIN?
MYSQL последний, но интересно как на других базах тоже. Спасибо
  • Вопрос задан
  • 9283 просмотра
Подписаться 3 Сложный Комментировать
Ответ пользователя ayazer К ответам на вопрос (4)
ayazer
@ayazer
Sr. Software Engineer
Он выгребет только то что надо. А еще может поменять порядок джойнов чтоб выгребать меньше/быстрее. Но в целом план выполенения запроса будет зависеть от многих факторов (в т.ч. кол-во данных в таблицах, индексы и статистика по этим индексам), потому всегда лучше посмотреть експлейн. А вот нюансы уже могут отличатся от вендора к вендору
Ответ написан