病毒安全知识,电脑网络技术,手工杀毒方法,答疑解决笔记

导航

« 关于win7虚拟WIFI热点fwdl.exe »

Oracle的minus与左连接

  财务从数据库中导数据,慢得要死,程序先不管,看看oracle数据库,发现后台一个视图cost好大,查了下用了minus连接两张大表。minus连接表相当于取主表中不存在于被连接表中的数据,比如select a.id from a minus select b.id from b,即列出a表中id字段不存在于b表中的数,但是minus还要有一个排序,可能遇上大数据量就很占资源。

  在网上查了半天,并没有什么很好的优化的方法,而用条件限制来减少查询数据量,试了下发现剩下的数据还是很多。

  最后用了左连接的方法解决问题,所谓左连接其实就是除所连接各表的交集外,再加上主表中的其余数据,这与minus并不相符,但可以加上一个限定条件,如上面的那个句子,可以变成select a.id from a,b where a.id=b.id(+) and b.id is null,这样就一致了。

  按网上的测试来说,左连接其实并不一定就比minus高效,但是由于表有经过分析(analyze),所以是Hash连接,因此会比minus开销少,cost减少到原来的四分之一。至少在这样大量数据面前颠覆了以前认为minus更高效的想法。

附左连接、右连接、外连接

1、左外连接 left outer join 或者 left join:

左外连接就是在等值连接的基础上加上主表中的未匹配数据,例:

SELECT * FROM A LEFT OUTER JOIN B ON A.ID=B.ID

Oracle支持另一种写法:SELECT * FROM A,B WHERE A.ID=B.ID(+)

即右表(B表)中有和A表匹配(=)的数据,左表(A表)中不一定有与B表中匹配的数据,但结果都要显示出来。如果后面再加上条件限制,如

select * from a,b where a.id=b.id(+) and a.id='001'

结果则是先进行左连接,再由条件筛选。

这种连接,等号右边的表有数据时,左边的表可能没有与之匹配数据

2、右外连接 right outer join 或者 right join:

右外连接是在等值连接的基础上加上被连接表的不匹配数据,与左连接相反

3、全外连接 full outer join 或者 full join:

全外连接是在等值连接的基础上将左表和右表的未匹配数据都加上


>> 除非说明均为原创,如转载请注明来源于http://www.stormcn.cn/post/1415.html

发表评论(无须注册,所有评论在审核通过后显示):

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

  • 微信订阅号
    微信订阅

最新发表

最新评论及回复

本站出现的所有广告均不代表本人及本站观点立场 | 关于我 | 网站地图 | 联系邮箱 | 返回顶部
Copyright 2008-2020 www.stormcn.cn. All Rights Reserved. Powered By Z-Blog.

闽公网安备 35010202000133号