SQL优化(四)执行顺序

    在“SQL优化(三)”中,我们分析了当id值相同时,SQL的执行顺序。这一篇将分析id值不同时SQL的执行。

    先说结论:id越大,越先执行;id相同时,从上到下顺序执行

    为了验证上述结论,对于执行相同任务的等价查询语句,分别分析其执行过程。  任务:“查询教授SQL课程的老师的描述”,相关的表及数据,请参考“SQL优化(一)"。

1. id值相同

    先构造id值相同的查询语句。

 explain select TeacherCard.Description  from  TeacherCard ,Course, Teacher  where Teacher.Id = Course.TeacherID and Teacher.CardID = TeacherCard.ID and Course.name = 'sql';

    执行结果:

    结论:id相同,从上到下顺序执行。 

    执行顺序为:TeacherCard, Course,Teacher,注意三张表上的数据量从小到大(分别为3,4,5)。

    原因:生成的中间表数据量最小,效率较高。

2. id值不同

    将上述多表查询语句改为子查询,即可构造id值不同的查询语句。

explain select Description  from  TeacherCard where ID = (select CardID  from Teacher where  ID = (select TeacherID  from  Course where name = 'sql'));

   执行结果:

    结论:id越大,越先执行

    执行顺序为:Course,Teacher,TeacherCard。

    原因:在有子查询时,先执行内层查询,再执行外层查询。

 3. id值部分相同

    将上述语句改为部分多表查询,部分子查询,即可构造id值部分相同的查询语句。

explain select TeacherCard.Description  from  TeacherCard,Teacher where Teacher.CardID = TeacherCard.ID and Teacher.ID = (select TeacherID  from  Course where name='sql');

    执行结果:

    结论:id越大,越先执行;id相同,从上到下顺序执行

   执行顺序为:Course,TeacherCard,Teacher。

   原因:Course表上的查询是子查询,所以先执行。TeacherCard,Teacher是多表查询,id值相同,TeacherCard表里数据量较小,所以先执行查询。最后Teacher表上的查询。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值