Производительность запроса 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';
рассматривает