2
有三個MySQL表:爲什麼這個MySQL查詢的解釋計劃只有三行?
要加入所有三個表,我們需要的是的PK,加上courseid指數:
alter table enrollment add index (courseid);
查詢:
select s.name, c.name, e.semesterid
from student s
join enrollment e on s.id=e.studentid
join course c on c.id=e.courseid;
解釋計劃:
+----+-------------+-------+--------+------------------+----------+---------+------------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+------------------+----------+---------+------------------+------+-------------+
| 1 | SIMPLE | e | index | PRIMARY,courseid | courseid | 4 | NULL | 10 | Using index |
| 1 | SIMPLE | s | eq_ref | PRIMARY | PRIMARY | 4 | test.e.studentid | 1 | |
| 1 | SIMPLE | c | eq_ref | PRIMARY | PRIMARY | 4 | test.e.courseid | 1 | |
+----+-------------+-------+--------+------------------+----------+---------+------------------+------+-------------+
解釋計劃看起來不錯,索引將被使用,沒有全表掃描。但問題在於,爲什麼這個計劃只有三行?我期望四行。我希望:
- 表學生 - 主鍵
- 表入學率 - 主鍵< - 這一次我沒有看到在計劃之中,爲什麼呢?
- 表報名 - 指數courseid
- 表場 - 主鍵
查詢聯接三個表,這意味着兩次將兩個表。這意味着我希望利用四個指標。
http://sqlfiddle.com/#!2/b30132/2
只要我一直在使用MySQL,查詢中的每一行一行。 – siride