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博客 ” ,链接:https://blog.itpub.net/11269677/viewspace-613821/
,如需转载,请注明出处,否则将追究法律责任。