Производительность запроса INNER JOIN ON и сравнение

Я хотел бы знать, какой из них лучше всего подходит для производительности между двумя запросами, указанными ниже, или они выполняются одинаково?

Первый: [без предложения WHERE, только AND с ON]

SELECT related_tabid AS tabid, label, t.name
  FROM relatedlists r
     INNER JOIN tab t 
       ON t.tabid = r.tabid
          AND t.name = 'Leads'
          AND r.is_active=1  and r.related_tabid <> 0
          AND t.is_active=1
  ORDER BY label

Второй: [с использованием предложения WHERE и связанного с ним вместо ON]

SELECT related_tabid AS tabid, label, t.name
  FROM relatedlists r
     INNER JOIN tab t 
       ON t.tabid = r.tabid
       WHERE t.name = 'Leads'
             AND r.is_active=1  and r.related_tabid <> 0
             AND t.is_active=1
  ORDER BY label

Ответ 1

Оба запроса одинаковы, поскольку используется соединение INNER JOIN. INNER JOIN в основном он фильтрует только строки, которые имеют хотя бы совпадение с другой таблицей. Даже две таблицы взаимозаменяемы, результат все тот же.

Но если вы присоединяетесь к ним через LEFT JOIN, два запроса отличаются друг от друга и будут давать разные результаты.

Ответ 2

Мне кажется, что единственное различие между этими двумя запросами состоит в том, что в предложении WHERE есть t.name = 'Leads', и он имеет это в предложении JOIN. Правильно?

Между ними нет никакой разницы. Оптимизатор SQL будет обрабатывать оба из них одинаково. Проведите EXPLAIN для каждого из них, чтобы проверить.

Ответ 3

В теории, первый запрос, как правило, просто хочет поместить сравнение текста в "where", затем присоединяется к определению "логики" объединения таблиц, а "where" используется только для указания значений, которые меняются при сравнении Где t.name = 'Leads'; рассматривает