日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle join 嵌套,誰能真正理解hash join/nested loop/merge join

發布時間:2024/4/14 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle join 嵌套,誰能真正理解hash join/nested loop/merge join 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于這三種JOIN的理解。Nested loop join,Hash join,Sort merge join

Nested loop join:

步驟:確定一個驅動表(outer table),另一個表為inner table,驅動表中的每一行與inner表中的相應記錄JOIN。類似一個嵌套的循環。適用于驅動表的記錄集比較小(<10000)而且inner表需要有有效的訪問方法(Index)。需要注意的是:JOIN的順序很重要,驅動表的記錄集一定要小,返回結果集的響應時間是最快的。

cost??= outer access cost + (inner access cost * outer cardinality)

|? ?2 |? ?NESTED LOOPS? ?? ?? ?? ?? ? |? ?? ?? ?? ???|? ???3 |? ?141 |? ???7??(15)|

|? ?3 |? ? TABLE ACCESS FULL? ?? ?? ? | EMPLOYEES? ? |? ???3 |? ? 60 |? ???4??(25)|

|? ?4 |? ? TABLE ACCESS BY INDEX ROWID| JOBS? ?? ?? ?|? ? 19 |? ?513 |? ???2??(50)|

|? ?5 |? ???INDEX UNIQUE SCAN? ?? ?? ?| JOB_ID_PK? ? |? ???1 |? ?? ? |? ?? ?? ?? ?|

EMPLOYEES為outer table, JOBS為inner table.

Hash join

步驟:將兩個表中較小的一個在內存中構造一個HASH表(對JOIN KEY),掃描另一個表,同樣對JOIN KEY進行HASH后探測是否可以JOIN。適用于記錄集比較大的情況。需要注意的是:如果HASH表太大,無法一次構造在內存中,則分成若干個partition,寫入磁盤的temporary segment,則會多一個寫的代價,會降低效率。

cost = (outer access cost * # of hash partitions) + inner access cost

--------------------------------------------------------------------------

| Id??| Operation? ?? ?? ?? ?|??Name? ?? ???| Rows??| Bytes | Cost (%CPU)|

--------------------------------------------------------------------------

|? ?0 | SELECT STATEMENT? ???|? ?? ?? ?? ???|? ?665 | 13300 |? ???8??(25)|

|? ?1 |??HASH JOIN? ?? ?? ???|? ?? ?? ?? ???|? ?665 | 13300 |? ???8??(25)|

|? ?2 |? ?TABLE ACCESS FULL??| ORDERS? ?? ? |? ?105 |? ?840 |? ???4??(25)|

|? ?3 |? ?TABLE ACCESS FULL??| ORDER_ITEMS??|? ?665 |??7980 |? ???4??(25)|

--------------------------------------------------------------------------

ORDERS為HASH TABLE,ORDER_ITEMS掃描

Sort merge join

步驟:將兩個表排序,然后將兩個表合并。通常情況下,只有在以下情況發生時,才會使用此種JOIN方式:

1.RBO模式

2.不等價關聯(>,=,<=,

3.HASH_JOIN_ENABLED=false

4.數據源已排序

cost = (outer access cost * # of hash partitions) + inner access cost

總結

以上是生活随笔為你收集整理的oracle join 嵌套,誰能真正理解hash join/nested loop/merge join的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。