对“SQL优化(一)” 中创建的表执行增删改查等操作,并查看这些操作的执行过程。如“查询课程编号为2 或教师证编号为3 的老师信息”。相应的SQL查询语句如下:
select Teacher.* from Teacher, Course, TeacherCard where Teacher.Id = Course.TeacherID and Teacher.CardID = TeacherCard.ID and (Course.ID = 2 or TeacherCard.ID = 3);
执行结果:

查询SQL语句的执行过程: explain + SQL语句。
explain select Teacher.* from Teacher, Course, TeacherCard where Teacher.Id = Course.TeacherID and Teacher.CardID = TeacherCard.ID and (Course.ID = 2 or TeacherCard.ID = 3);
执行结果:
先看上表中的id值,它们都为1,此时SQL语句从上往下顺序执行,即执行顺序为Teacher,TeacherCard,Course,三张表的数据数目(rows)分别为3,3,4。在这里我们有一个猜想:是否数据量小的表上优先执行查询?
为了验证我们的猜想,我们来增加Teacher表中数据的数目(5条及以上),然后重新查看上述SQL语句的执行顺序。
insert into Teacher values(4,"Amy",1);
insert into Teacher values(5,"Tom",1);
执行结果
此时,SQL的执行顺序为TeacherCard, Course,Teacher,三张表的数据数目分别为3,4,5。这已经与上面的顺序(Teacher,TeacherCard, Course)完全不同了。实验结果验证了我们的猜想:连表查询时,数据量小的表上优先执行查询。
数据库为什么会安排这样的执行顺序呢?通过观察我们可以发现,优先查询数据量小的表,执行过程中产生中间表最小,执行效率最高。