外连接 与 子查询

ruoye_2008 2012-05-15 10:41:00

-- 外连接:
select u.*, o.org_name from user u left join org o on u.org_id = o.org_id;
-- 子查询:
select u.*, (select o.org_name from org o where u.org_id = o.org_id) from user u;


这两个比较,性能应该是外连接的高吧?(上面两个id皆为主键)

(注:因为在Hibernate中,没做关联映射,是不能使用外连接的,但可以使用子查询,故想问下比较下两者性能)
...全文
181 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
简即美 2012-05-23
  • 打赏
  • 举报
回复
如果数据量很大肯定是左链接快。
其实嵌套查询优化器也会优化成联合排序的。
BenChiM888 2012-05-15
  • 打赏
  • 举报
回复
这要看执行计划才能判断,直接看只能瞎猜。
看一下执行计划,一切了然。
hupeng213 2012-05-15
  • 打赏
  • 举报
回复
使用表连接替换EXISTS
一般情况下,使用表连接比EXISTS更高效
-->低效:
SELECT *
FROM employees e
WHERE EXISTS
(SELECT 1
FROM departments
WHERE department_id = e.department_id AND department_name = 'IT');

-->高效:
SELECT * -->经测试此写法SQLplus下比上面的写法多一次逻辑读,而在Toad下两者结果一致
FROM employees e INNER JOIN departments d ON d.department_id = e.department_id
WHERE d.department_name = 'IT';
  • 打赏
  • 举报
回复
连接是以左表为基表 关联右表 只要存在关系就获取数据 不做判断

子查询都是判断后才获取数据 累计判断多了
  • 打赏
  • 举报
回复
一般说来 连接效率高点 也要看具体情况了 少量数据可能子查询会稍微快点
薛定谔之死猫 2012-05-15
  • 打赏
  • 举报
回复
没错,看执行计划,cost分散情况很清楚~
码上生活8899 2012-05-15
  • 打赏
  • 举报
回复
在SQL*Plus中执行命令SET TIMING ON , 然后分别执行这两个语句看看他们的执行时间
槑党--一缕风 2012-05-15
  • 打赏
  • 举报
回复
对看下执行计划

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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