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