考慮2個MySQL查詢:簡單的MySQL的子查詢性能
SELECT ue.userid,e.courseid
FROM (SELECT id,courseid FROM mdl_enrol WHERE status = 0 AND courseid IN (46)) e
INNER JOIN (SELECT enrolid,userid FROM mdl_user_enrolments) ue ON ue.enrolid = e.id
INNER JOIN (SELECT userid FROM mdl_userdata) ud ON ue.userid = ud.userid
-
SELECT ue.userid,e.courseid
FROM mdl_enrol e
INNER JOIN mdl_user_enrolments ue ON ue.enrolid = e.id
INNER JOIN mdl_userdata ud ON ue.userid = ud.userid
WHERE e.status = 0 AND e.courseid IN (46)
底部查詢是很多很多比上查詢速度快,但爲什麼呢?我已經讀過,爲了提高性能,您只應選擇所需的列。此外,對我來說,頂級查詢應該會更好,因爲在每個JOIN中,您都會減少要加入的數據量。很明顯,我對數據庫的工作原理的理解是錯誤的,但如果有人能夠清楚這一點,將會非常感激。 EXPLAIN也證實底部查詢速度更快。
非常感謝。
「提高性能,你應該只選擇你需要的列」---並提高性能,你應該避免使用子查詢:-) – zerkms