Я написал запрос, используя как соединение, так и подзапрос, но я не знаю, какая из них имеет лучшую производительность. Не могли бы вы мне сказать?У кого лучше производительность, соединение или подзапрос?
Мой запрос с использованием подзапроса: с помощью
SELECT e.e_id,e.name,e.email, (SELECT mc.m_id FROM table3 AS mc WHERE e.mobile = mc.c_mobile AND e.status=0 AND mc.currentdate<= e.currentdate LIMIT 1) AS cm_id
FROM table1 AS e
INNER JOIN table3 AS m
ON e.e_id = m.m_id AND m.m_status = 1
WHERE e.city LIKE 'wgl' AND e.status >= 0
GROUP BY e.email
ORDER BY e.status ASC, e.currentdate DESC
Мой запрос присоединяется:
SELECT e.e_id,e.name,e.manager_id,mc.m_id AS cm_id
FROM table1 AS e
LEFT JOIN table3 AS mc
ON e.mobile = mc.c_mobile AND e.status=0 AND mc.currentdate <= e.currentdate
INNER JOIN table2 AS m
ON e.manager_id = m.m_id AND m.m_status = 1
WHERE e.city LIKE 'wgl' AND e.status >= 0
GROUP BY e.email
ORDER BY e.status ASC, e.currentdate DESC
Что работает лучше? Как я могу узнать, что лучше?
Я считаю, что ответ на ваш вопрос «потому что SQL-движок лучше оптимизирует некоторые запросы, чем другие». Так что вы делаете это хорошо: просто проверьте и посмотрите, значительна ли разница во времени. В противном случае нет четкого ответа. –
Используйте 'EXPLAIN', чтобы MySQL мог рассказать вам, что он делает. Это также говорит вам, что быстрее. Это намного быстрее, чем спрашивать о SO. Кроме того, вы можете найти этот совет почти в каждом вопросе производительности запросов, связанных с MySQL, пожалуйста, сделайте свое исследование, прежде чем спрашивать. –
Я тестировал его с помощью EXPLAIN, он показывает тип выбора, простой для объединений и первичный для подзапроса, что он означает. Он не показывает время выполнения. Как я могу видеть время. – user3278227