关于数据库查询表的2中写法,哪一种效率高?

扁鵲東南飛 2018-10-15 04:07:22
SQL1:
SELECT NAME,
(SELECT SEXNAME FROM TBL_SEX B WHERE A.SEXNO = B.SEXNO) AS SEXNAME
FROM TBL_PERSON A
WHERE CERTNO = '3404031';


SQL2:
SELECT NAME, A.SEXNAME
FROM TBL_PERSON A
LEFT JOIN TBL_SEX B ON A.SEXNO = B.SEXNO
WHERE CERTNO = '3404031';



这两种写法执行效率,哪一个方式更为高,为什么?
...全文
496 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
nayi_224 2018-10-16
  • 打赏
  • 举报
回复
用的不好的话,标量子查询的效率是没下限的。
  • 打赏
  • 举报
回复
第二种 左连接 效率好些。
minsic78 2018-10-16
  • 打赏
  • 举报
回复
简单说说,外层查询数据量越大,标量子查询的性能会越差,越不如写成外连来完成连接。
chenerwa0428 2018-10-15
  • 打赏
  • 举报
回复
在SQL1 中首要 要确保b.SEXNO中只有一条记录,不是要报错;
个人经验如果B.SEXNO有索引,SQL1(子查询)会快点,
没有索引的话,两者差不多
卖水果的net 2018-10-15
  • 打赏
  • 举报
回复
第一种,标量子查询,执行计划中的连接方式,肯定是 NL 。 第二种,左连接,执行计划中的连接方式,可能是 MJ 或 HJ 。 楼主先研究一下,这三种联接方式的特性,就会有结论。
扁鵲東南飛 2018-10-15
  • 打赏
  • 举报
回复
SQL2:有个错误,以下进行修正
SELECT NAME, B.SEXNAME
  FROM TBL_PERSON A
  LEFT JOIN TBL_SEX B ON A.SEXNO = B.SEXNO
 WHERE CERTNO = '3404031';

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧