SQL优化(三)执行顺序

   对“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)完全不同了。实验结果验证了我们的猜想:连表查询时,数据量小的表上优先执行查询

    数据库为什么会安排这样的执行顺序呢?通过观察我们可以发现,优先查询数据量小的表,执行过程中产生中间表最小,执行效率最高。

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值