耶尔_ 2022-03-05 12:53 采纳率: 61.5%
浏览 140
已结题

join和select子句中的子查询 效率比较

以最熟悉的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

  • 写回答

1条回答 默认 最新

  • DarkAthena ORACLE应用及数据库设计方案咨询师 2022-03-05 13:52
    关注

    这两种方式在不同场景下,效率可能各有高低,主要是看这两个表中的记录数、通过where限制条件后需要展示的记录数、主表(或者说一个主查询SQL)是否为一个比较复杂的查询。
    在原表数据量大、主SQL比较复杂,且最终需要的记录数不多的情况下,比如只有一行,那么用标量子查询可能会比较快。
    如果数据都不大,SQL也不复杂,最终要展示的记录数和原表差不多时,用join。
    标量子查询是要一行一行去查的,当数据量少时有优势,数据量大循环次数多就没有优势了。
    至于为什么要比较主SQL的复杂度,是基于内存考虑,本来主SQL的窗口大小已经够大了,再join一个表,窗口中的列数又变多了;而标量子查询是在查出关联字段的数据后再去检索匹配字段,占内存会比较小。
    所以这两种方式哪种好,应该在实际的应用场景中亲自去试,这个没有绝对的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月13日
  • 已采纳回答 3月5日
  • 修改了问题 3月5日
  • 修改了问题 3月5日
  • 展开全部

悬赏问题

  • ¥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键失灵