Объясните план показывает другой тип соединения - PullRequest
0 голосов
/ 25 декабря 2018

Когда я получаю план выполнения запроса ниже, даже если я пишу правое внешнее соединение, оно записывает левое внешнее соединение.

select * from employees e right outer join departments d
using(department_id);

И это вывод:

--------------------------------------------------------------------------------------------
| Id  | Operation                    | Name        | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |             |   122 | 10980 |     6  (17)| 00:00:01 |
|   1 |  MERGE JOIN OUTER            |             |   122 | 10980 |     6  (17)| 00:00:01 |
|   2 |   TABLE ACCESS BY INDEX ROWID| DEPARTMENTS |    27 |   567 |     2   (0)| 00:00:01 |
|   3 |    INDEX FULL SCAN           | DEPT_ID_PK  |    27 |       |     1   (0)| 00:00:01 |
|*  4 |   SORT JOIN                  |             |   107 |  7383 |     4  (25)| 00:00:01 |
|   5 |    TABLE ACCESS FULL         | EMPLOYEES   |   107 |  7383 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------------------------

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

   4 - access("D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID"(+))
       filter("D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID"(+))

Если я использую левое внешнее соединение, на этот раз оно показывает правое внешнее соединение.В чем причина?

select * from employees e left outer join departments d using(department_id);


-------------------------------------------------------------------------------------
| Id  | Operation             | Name        | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |             |   107 |  9630 |     6   (0)| 00:00:01 |
|*  1 |  HASH JOIN RIGHT OUTER|             |   107 |  9630 |     6   (0)| 00:00:01 |
|   2 |   TABLE ACCESS FULL   | DEPARTMENTS |    27 |   567 |     3   (0)| 00:00:01 |
|   3 |   TABLE ACCESS FULL   | EMPLOYEES   |   107 |  7383 |     3   (0)| 00:00:01 |
-------------------------------------------------------------------------------------

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

   1 - access("E"."DEPARTMENT_ID"="D"."DEPARTMENT_ID"(+)) 

Заранее спасибо.

...