Oracle的表連線方法(三)雜湊連線

stonebox1122發表於2017-06-05

Oracle表連線方法有四種:
  ● 排序合併連線(Sort Merge Join)
  ● 巢狀迴圈連線(Nested Loops Join)
  ● 雜湊連線(Hash Join)
  ● 笛卡爾積(Cartesian Product)


如果兩個表對應的結果集很大,使用排序合併的話,排序操作成本較高;使用巢狀迴圈的話,則迴圈次數又很多,需要多次訪問被驅動表的結果集;為了提高這種情況下表連線的效率,最佳化器提供了新的表連線方法,即雜湊連線。雜湊連線是使用雜湊運算來得到結果的表連線方法。只適用於等值連線條件。


SQL> create table emp as select * from employees;

Table created.

SQL> create table dept as select * from departments;

Table created.

SQL> select e.employee_id,d.department_name from emp e,dept d where e.department_id=d.department_id;

106 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 615168685

---------------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |   106 |  5936 |     6   (0)| 00:00:01 |
|*  1 |  HASH JOIN         |      |   106 |  5936 |     6   (0)| 00:00:01 |
|   2 |   TABLE ACCESS FULL| DEPT |    27 |   810 |     3   (0)| 00:00:01 |
|   3 |   TABLE ACCESS FULL| EMP  |   107 |  2782 |     3   (0)| 00:00:01 |
---------------------------------------------------------------------------

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28536251/viewspace-2140311/,如需轉載,請註明出處,否則將追究法律責任。

相關文章