Java培训MySQL之子查询优化

发布时间:2020年06月23日作者:atguigu浏览次数:586

1. 案例

取所有不为掌门人的员工,按年龄分组!

select age as ‘年龄’, count(*) as ‘人数’ from t_emp where id  not in

(select ceo from t_dept where ceo is not null) group by age;

Java培训学习

如何优化?

①解决dept表的全表扫描,建立ceo字段的索引:

Java培训学习

此时,再次查询:

Java培训学习

②进一步优化,替换not in。

上述SQL可以替换为:

 select age as ‘年龄’,count(*) as ‘人数’ from emp e left join dept d on e.id=d.ceo where d.id is null group by age;

Java培训学习

结论: 在范围判断时,尽量不要使用not in和not exists,使用 left join on xxx is null代替。


上一篇:
下一篇:
相关课程

java培训 大数据培训 前端培训 UI/UE设计培训

关于尚硅谷
教育理念
名师团队
学员心声
资源下载
视频下载
资料下载
工具下载
加入我们
招聘岗位
岗位介绍
招贤纳师
联系我们
全国统一咨询电话:010-56253825
地址:北京市昌平区宏福科技园2号楼3层(北京校区)

深圳市宝安区西部硅谷大厦B座C区一层(深圳校区)

上海市松江区谷阳北路166号大江商厦6层(上海校区)

武汉市东湖高新开发区东湖网谷(武汉校区)

西安市雁塔区和发智能大厦B座3层(西安校区)