- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
rale中表的连接及其调整.doc
Oracle中表的连接及其调整
只打对这些问题Yf了清晰的理解后,我们冰能针对特定的杏洵需求选择合适的连接方式,开发出 健壮的数据库应用稈序。选择合适的表连接方法对SQL语句运行的性能冇着至关重要的影响。下 面我们就Oracle常用的一些连接方法及适川情景做一个简单的介绍。
常用的表连接方式:
a.嵌套循环连接(Nested Loop) b.排序合并连接(Sort Merge) c.哈希连接(Hash join)
一、嵌套循环连接(Nested Loop)
嵌套循环连接的工作方式足这样的.?
1、 Oracle薛先选择一张表作为连接的驱动表,这张表也称为外部表(Outer Table)。山驱动 表进行驱动连接的表或数裾源称为内部表(Inner Table)。
2、 提取驱动表中符介条件的记录,与被驱动表的连接列进行关联查询符介条件的记录。在这个 过程屮,Oracle首先提取驱动衣屮符合条件的第?-?条记呆,再与内部农的连接列进行关联杏询 相应的记录行。在关联杏询的过程屮,Oracle会持续提取驱动农屮其他符合条件的记录与内部 表关联查询。这两个过程足并行进行的,因此朕套循环连接返冋前儿条记泶的速度足非常快的。 在这里需要说明的是,由于Oracle最小的10单位为单个数据块,因此在这个过程屮Oracle会 首先提取驱动农屮符合条件的单个数据块屮的所有行,再与内部衣进行关联连接杏询的,然C提 取下一个数据块中的记录持续地循环连接下去。当然,如果单行记录跨越多个数据块的话,就足 一次单条记朵进行关联查询的。
3、 嵌赍循环连接的过程如下所示:
NESTED LOOP
〈Outer Loop〉
〈Tnner Loop〉
我们可以看出这里而存在着两个循环,一个是外部循环,提取驱动表中符合条件的甸条记录。另 外一个是A部循环,根据外循环屮提取的每条记录对A部表进行连接查询相应的记录。巾于这两 个循环是嵌赍进行的,故此种连接人法称为嵌卷循环连接。
嵌套循环连接适用于杏洵的选择性强、约束性高并且仅返回小部分记录的结果集。通常要求驱动 表的记泶(符介条件的记录,通常通过高效的索引访问)较少,且被驱动表连接列有唯一索引成 者选择性强的非唯一索引吋,嵌套循环连接的效率足比较商的。
比如卜*而这个S洵是选用嵌卷循环连接的典型例子:
SQL〉select e. empno, e. ename, e. job, d. dname
from emp e,dept d
where e.deptno=d. deptno
and e. empno=7900;
EMPNO ENAME JOB DNAME
7900 JAMES CLERK SALES
Execution Plan
0 SELECT STATEMENT Optimizer二CHOOSE
102 1214NESTED LOOPSTABLE ACCESS (BY INDEX
10
2 1
2
1
4
NESTED LOOPS
TABLE ACCESS (BY INDEX
INDEX (UNIQUE SCAN) OF
TABLE ACCESS (BY INDEX
INDEX (UNIQUE SCAN) OF
ROW ID) OE ’EMP’
’PK EMP’ (UNIQUE)
ROWID) OF ’ DEPT’
’PK DEFT (UNIQUE)
在这个查询中,优化器选择emp作为驱动表,根裾唯一性索引PK EMP快速返回符合条件empno 为7900的记求,然后再与被驱动表dept的deptno关联查询相皮的dname ?最终返冋结果策。
由于dept衣上面的deptno有唯一索引PK_DEPT,故资询能够快速地记位deptno对应dname为 SALES的记录并返冋。
嵌套循环连接驱动表的选择也是连接屮需耍着重注意的一点,冇一个常见的误区是驱动农要选择 小表,其实这足不对的。假如奋两张表A、B关联査询,A表奋1000000条记录,B表奋10000 条记泶,但足A表过滤出米的记泶只奋10条,这时候显然川A表当做驱动表足比较介适的。因 此驱动农足由过滤条件限制返回记诚最少的那张农,而不足根据表的人小來选择的。
在外连接杏询屮,如果走嵌套循环连接的话,那么驱动衣必然是没有符合条件关联的那张衣,也 就是耵而不加(+)的那张衣。这是由于外连接需要提取可能另-?张衣没符合条件的记录,因此驱 动表需要是那张我们要返冋所有符合条件记录的表。比如下而这个杏洵,就是选择了 emp表做为 驱动农进行连接:
Roby@XUE select emp. ename, dept. dname
2 from
emp, dept
3 where
emp.deptno=dept. deptno(+);
ENAME
DNAME
SMITH
原创力文档


文档评论(0)