Oracle Join Methods

來源:互聯網
上載者:User

Hash Join

過程

通過一個例子來說明

SQL_ID  gtmmr9gaxqhfr, child number 0
-------------------------------------
SELECT /*+ USE_HASH(d e) */e.ename, d.dname FROM emp e, dept d where
e.deptno=d.deptno

Plan hash value: 1123238657

-------------------------------------------------------------------------------------------------------
| Id  | Operation          | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time  |  OMem |  1Mem | Used-Mem |
-------------------------------------------------------------------------------------------------------
|  0 | SELECT STATEMENT  |      |        |      |  106 (100)|          |      |      |          |
|*  1 |  HASH JOIN        |      |    15 |  360 |  106  (1)| 00:00:02 |  1206K|  1206K|  661K (0)|
|  2 |  TABLE ACCESS FULL| EMP  |    15 |  135 |    3  (0)| 00:00:01 |      |      |          |
|  3 |  TABLE ACCESS FULL| DEPT |    100K|  1465K|  103  (1)| 00:00:02 |      |      |          |
-------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

  1 - access("E"."DEPTNO"="D"."DEPTNO")

1. Oracle將emp以deptno為hash key在PGA中建立一個hash table,這個hash table是分區的,假如PGA的hash area不夠大,將會以分區為單位寫入temp資料表空間。Oracle總是使用較小的結果集建立hash table。在執行計畫中,緊跟著Hash join的就是probed hash table。

 

2. Oracle掃描dept,同樣以deptno位hash key去probe記憶體/temp中的hash table。

3. 返回結果。

由於Hash join使用PGA,是私人記憶體,不需要latch保護。這一點與buffer cache中內容讀寫不一樣。

 

Zero pass, One pass and Multiple pass

hash area size能夠儲存整個probed hash table時,不需要使用temp,效能最優,為zero pass。在執行機會中稱之為0mem

當hash area size能夠放下至少一個分區時,執行計畫中為1mem.

hash area size連一個完整分區都不能儲存時,為最差情況,這種情況稱為multiple pass.

 

Nested Loop Join

Nested loop工作原理類似雙重迴圈。通常用於兩個小的結果集。

特點:

outer table比較小,inner table可以用串連鍵快速定位,比如使用索引。也就是說,inner table的串連鍵上有索引。在執行計畫裡,

NESTED LOOPS
outer_loop
inner_loop

Oracle 11g引入了新的實現方式,在執行計畫裡有體現。具體請看Performance Tuning Guide Page 300。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.