ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 关于这三种JOIN的理解。Nested loop join,Hash join,Sort merge join

关于这三种JOIN的理解。Nested loop join,Hash join,Sort merge join

原创 Linux操作系统 作者:kvsion 时间:2009-09-02 21:10:06 0 删除 编辑
Nested loop join: 
m tCu N"C:{[11269677
)O7xV/H/? N~11269677步骤:确定一个驱动表(outer table),另一个表为inner table,驱动表中的每一行与inner表中的相应记录JOIN。类似一个嵌套的循环。适用于驱动表的记录集比较小(<10000)而且inner表需要有有效的访问方法(Index)。需要注意的是:JOIN的顺序很重要,驱动表的记录集一定要小,返回结果集的响应时间是最快的。ITPUB个人空间[4@ f[ eS3_A
ITPUB个人空间Yp7s O7R
cost  = outer access cost + (inner access cost * outer cardinality)
ZB8C`d"~1?.W k6C11269677ITPUB个人空间;}%b%LL*Y(`PO

5G;g'~(wl%lLV11269677|   2 |   NESTED LOOPS                |              |     3 |   141 |     7  (15)|ITPUB个人空间)w [AIW
|   3 |    TABLE ACCESS FULL          | EMPLOYEES    |     3 |    60 |     4  (25)|ITPUB个人空间Vz |4P1t
|   4 |    TABLE ACCESS BY INDEX ROWID| JOBS         |    19 |   513 |     2  (50)|
IBP Fw g;RyU11269677|   5 |     INDEX UNIQUE SCAN         | JOB_ID_PK    |     1 |       |            |ITPUB个人空间[_a'Cz H^&{0m

ia IN*^ W3O6U11269677ITPUB个人空间(g4d:]4s(@1t(`7d
EMPLOYEES为outer table, JOBS为inner table.ITPUB个人空间4iY&uqui

-U EzHJ11269677Hash join
\Z v gYT&w%q11269677
[` Z5?5Ee J]11269677步骤:将两个表中较小的一个在内存中构造一个HASH表(对JOIN KEY),扫描另一个表,同样对JOIN KEY进行HASH后探测是否可以JOIN。适用于记录集比较大的情况。需要注意的是:如果HASH表太大,无法一次构造在内存中,则分成若干个partition,写入磁盘的temporary segment,则会多一个写的代价,会降低效率。
l.}Fi {w6^11269677
[#U9tu.e!U11269677cost = (outer access cost * # of hash partitions) + inner access cost
5e&cz}o-u9yM11269677--------------------------------------------------------------------------
A+nn Ljl-D.a11269677| Id  | Operation            |  Name        | Rows  | Bytes | Cost (%CPU)|
Hy8r ]d#m`11269677--------------------------------------------------------------------------
b*Ev+Gx;H.\11269677|   0 | SELECT STATEMENT     |              |   665 | 13300 |     8  (25)|
n:|[%jGm'T3W11269677|   1 |  HASH JOIN           |              |   665 | 13300 |     8  (25)|
jZW(G^11269677|   2 |   TABLE ACCESS FULL  | ORDERS       |   105 |   840 |     4  (25)|ITPUB个人空间 Wzi!{6P3\XV
|   3 |   TABLE ACCESS FULL  | ORDER_ITEMS  |   665 |  7980 |     4  (25)|ITPUB个人空间 u6JY_ yZ|
--------------------------------------------------------------------------
5f4os"@:m g11269677ITPUB个人空间!zc8GT)R*BB*u8p0M+P

'I#DUh6Yf x2_/e11269677ORDERS为HASH TABLE,ORDER_ITEMS扫描
%F9i7{%QX11269677ITPUB个人空间(xRcfL#E(J]
Sort merge join
I7bL UW1w!Q11269677ITPUB个人空间)?K2Q6qh.K.y
步骤:将两个表排序,然后将两个表合并。通常情况下,只有在以下情况发生时,才会使用此种JOIN方式:
nbv[|)b11269677ITPUB个人空间V&eR+X;Ju |:`&H]+x3Y
1.RBO模式
"~6d;`$SxAu11269677ITPUB个人空间 UmEBC
2.不等价关联(>,<,>=,<=,<>ITPUB个人空间t(k4s,e2_6z

@4j'F$fF9{112696773.HASH_JOIN_ENABLED=falseITPUB个人空间].pS_&SxU)Je

/[9YN6deO112696774.数据源已排序ITPUB个人空间-x9x4v#A-o)A
ITPUB个人空间w[+^\ ]$T-`Z
cost = (outer access cost * # of hash partitions) + inner access cost
'z)j2lMX P11269677

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11269677/viewspace-613821/,如需转载,请注明出处,否则将追究法律责任。

上一篇: ORACLE 发邮件
下一篇: DBA笔试题目
请登录后发表评论 登录
全部评论

注册时间:2008-09-20

  • 博文量
    17
  • 访问量
    23824