2つの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は、一番下のクエリがはるかに高速であることも確認します。
どうもありがとう。