MySQL调优学习笔记(五):子查询
MySQL调优学习笔记(五):子查询
参考资料:姜承尧的MySQL实战宝典
子查询性能提升
MySQL 8.0 版本中,子查询的优化得到大幅提升。优化器会自动地将子查询优化为最佳的 JOIN 执行计划,这样一来会显著的提升性能。所以放心大胆地在MySQL8.0 中使用子查询吧!
子查询 中IN 和 EXISTS,哪个性能更好?
主要看执行计划。如果两者执行计划完全一样,性能没有任何差别。
依赖子查询的优化
在 MySQL 8.0 版本之前,对于子查询的优化并不充分。所以在子查询的执行计划中会看到 DEPENDENT SUBQUERY 的提示,这表示是一个依赖子查询,子查询需要依赖外部表的关联。DEPENDENT SUBQUERY 执行速度可能非常慢。
对于依赖子查询的优化,就是要避免子查询由于对外部表的依赖,而需要对子查询扫描多次的情况。所以可以通过派生表的方式,将外部表和子查询的派生表进行连接,从而降低对于子查询表的扫描,从而提升 SQL 查询的性能。
总结
- 子查询相比 JOIN 更易于被人类理解,所以受众更广,使用更多;
- MySQL 8.0 版本可以放心大胆地写子查询,对于子查询的优化已经相当完备;
-
子查询 中IN 和 EXISTS,哪个性能更好?主要看执行计划。
- 对于老版本的 MySQL,请回顾所有子查询的SQL执行计划, 对于出现 DEPENDENT SUBQUERY 的提示,请务必进行优化,否则对业务将造成重大的性能影响。DEPENDENT SUBQUERY 的优化,一般是重写为派生表进行表连接。
最新文章
- 俞敏洪在北京大学2008年开学典礼上的演讲辞
- Cocos Creator Layout组件
- 概率漫谈 转自 林达华
- python snmp
- SNMP协议简介
- 【时间复杂度】时间复杂度
- windows 2008虚拟机的安装方法
- 安装MinGW和MSYS
- 最速下降法(梯度下降法)python实现
- APP 专项测试之兼容性测试
- Android: How to Capture Screen in Gingerbread(2.3中实现截屏)
- Jmeter 之 Beanshell 用法
- ExtJS (3.3的使用)
- 二叉树的五种遍历方式
- Hashtable的用法
- 第三方联调
- Postgresql通过docker进行高可用部署 pgpool
- 微信开发之小程序实现倒计时
- STM32外部中断及串口
- cs,ds,ss,es?即cs,ds,ss,es的区别