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

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日
  • 展开全部

悬赏问题

  • ¥20 蓝牙耳机怎么查看日志
  • ¥15 R语言 拟时序分析降维图如何减少分支
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统