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