以最熟悉的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
![](https://profile-avatar.csdnimg.cn/default.jpg!4)
join和select子句中的子查询 效率比较
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注
这两种方式在不同场景下,效率可能各有高低,主要是看这两个表中的记录数、通过where限制条件后需要展示的记录数、主表(或者说一个主查询SQL)是否为一个比较复杂的查询。
在原表数据量大、主SQL比较复杂,且最终需要的记录数不多的情况下,比如只有一行,那么用标量子查询可能会比较快。
如果数据都不大,SQL也不复杂,最终要展示的记录数和原表差不多时,用join。
标量子查询是要一行一行去查的,当数据量少时有优势,数据量大循环次数多就没有优势了。
至于为什么要比较主SQL的复杂度,是基于内存考虑,本来主SQL的窗口大小已经够大了,再join一个表,窗口中的列数又变多了;而标量子查询是在查出关联字段的数据后再去检索匹配字段,占内存会比较小。
所以这两种方式哪种好,应该在实际的应用场景中亲自去试,这个没有绝对的本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 2无用
悬赏问题
- ¥15 metadata提取的PDF元数据,如何转换为一个Excel
- ¥15 关于arduino编程toCharArray()函数的使用
- ¥100 vc++混合CEF采用CLR方式编译报错
- ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
- ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
- ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
- ¥50 如何openEuler 22.03上安装配置drbd
- ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
- ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
- ¥15 Windows11, backspace, enter, space键失灵