以最熟悉的emp和dept表为例,假设想要查阅员工表的所有信息,以及部门表中的部门名称,我想知道下面两种方法哪种的效率更高?
1.联表
select e.,d.name
from emp e,dept d
Where e.deptno = d.deptno
2.子查询
select e.,(select dname from dept d
where d.deptno = e.deptno) dname
from emp e
join和select子句中的子查询 效率比较
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注 这两种方式在不同场景下,效率可能各有高低,主要是看这两个表中的记录数、通过where限制条件后需要展示的记录数、主表(或者说一个主查询SQL)是否为一个比较复杂的查询。
在原表数据量大、主SQL比较复杂,且最终需要的记录数不多的情况下,比如只有一行,那么用标量子查询可能会比较快。
如果数据都不大,SQL也不复杂,最终要展示的记录数和原表差不多时,用join。
标量子查询是要一行一行去查的,当数据量少时有优势,数据量大循环次数多就没有优势了。
至于为什么要比较主SQL的复杂度,是基于内存考虑,本来主SQL的窗口大小已经够大了,再join一个表,窗口中的列数又变多了;而标量子查询是在查出关联字段的数据后再去检索匹配字段,占内存会比较小。
所以这两种方式哪种好,应该在实际的应用场景中亲自去试,这个没有绝对的本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 2无用
悬赏问题
- ¥170 如图所示配置eNSP
- ¥20 docker里部署springboot项目,访问不到扬声器
- ¥15 netty整合springboot之后自动重连失效
- ¥15 悬赏!微信开发者工具报错,求帮改
- ¥20 wireshark抓不到vlan
- ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
- ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
- ¥15 stata安慰剂检验作图但是真实值不出现在图上
- ¥15 c程序不知道为什么得不到结果
- ¥15 键盘指令混乱情况下的启动盘系统重装