ITPUB??ì3
新一届的微软MVP评选已经开始,欢迎各位推荐!
ITPUB论坛 » Oracle开发 » 内连接和外连接效率比较

标题: 内连接和外连接效率比较
离线 douqq
初级会员



精华贴数 0
个人空间 0
技术积分 246 (7880)
社区积分 0 (688773)
注册日期 2005-11-14
论坛徽章:1
生肖徽章2007版:鼠     
      

发表于 2008-6-30 11:30 
内连接和外连接效率比较

两表连接查询:对两表求积(笛卡尔积)并用ON条件和连接连接类型进行过滤形成中间表;然后根据WHERE条件过滤中间表的记录,并根据SELECT指定的列返回查询结果。

如果有2张表的数据一一对应,而且从查询结果上看,内连接和外连接查询结果完全一样。
那么我想问,它们的效率一样吗?
如果按照上一句话,两表连接 先是先求笛卡尔积 这个过程并不能体现 内连接和外连接的区别。
我的猜想是 他们的效率差别 体现在 on 条件的约束上,在对on条件做过滤的时候,外连接比内连接要多做一部 if null 的动作。

所以我想知道,外连接究竟比内连接耗费在哪里,或者他们的效率一样?

此外还有个小问题
把一些条件写在 inner join  on  后面 ,如 t1.a=1 之类,能实现在做笛卡尔积之前的过滤吗?


只看该作者    顶部
在线/呼叫 zhangfengh
老狐狸


精华贴数 3
个人空间 0
技术积分 13233 (86)
社区积分 5937 (256)
注册日期 2002-10-12
论坛徽章:89
现任管理团队成员2008北京奥运纪念徽章:自行车    
      

发表于 2008-6-30 11:48 
内连接和外连接是不同情况下的不同的用法,不能这么比较吧


__________________
=======================================
狐狸在这个世界上是凭借聪明而得到生存的,并且在这个世界上占有一席之地,学习狐狸的聪明,少走弯路。
=======================================
吸收别人的经验,使之成为自己的经验!
=======================================
只看该作者    顶部
离线 douqq
初级会员



精华贴数 0
个人空间 0
技术积分 246 (7880)
社区积分 0 (688773)
注册日期 2005-11-14
论坛徽章:1
生肖徽章2007版:鼠     
      

发表于 2008-6-30 11:52 
我知道,我们应该根据业务规则来决定用哪种写法。
我只是想知道内部原理而已,所以那特定的数据才假设。


只看该作者    顶部
离线 caizhuoyi
Oracle Stranger


精华贴数 2
个人空间 0
技术积分 1527 (1104)
社区积分 448 (1502)
注册日期 2006-3-1
论坛徽章:4
授权会员生肖徽章2007版:龙2008北京奥运纪念徽章:棒球数据库板块每日发贴之星  
      

发表于 2008-6-30 15:08 
举两个例子:

SELECT * FROM emp a JOIN dept b ON a.deptno = b.deptno;

SELECT * FROM emp a LEFT JOIN dept b ON a.deptno = b.deptno;

第一个用到了dept的deptno 上的索引index full scan,第二个都是全表扫描。显然内连接的效率比外连接要高。
若deptno没有建索引,用到的应该是全表扫描,需要另外比较。

总之,具体问题具体分析。


__________________
我不在江湖,但江湖中有我的传说;
我身在江湖,江湖里却没有我的传说。
只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问