오라클/Tuning

Join 관련 용어

빵순이^^ 2010. 5. 8. 15:10
  1. Statment에서의 기능에 따라

    select *
    from emp e, dept d                                   -- join statement
    where e.deptno = d.deptno                       -- join predicate
    and e.job = 'CLERK'                                -- non-join predicat
    and e.sal >= 1000                                    -- non-join predicat
    and d.deptno = 10                                    -- non-join predicat (single-row predicate)

  2. Join 문장을 분류하기 위해

    - oracle syntax   : equi, nonequi, outer, self
    - sql:1999 syntax : cross, natural, join using, join on, [left | right | full] outer join

  3. Join Operation을 분류하기 위해 (UDS 참고)
      
     종류  데이터의 양  RBO  CBO  비고
     Nested Loop  소량, 다양(정렬 필요)  O  O  인덱스의 상황에 따라 다양한 변화가 가능하다.
     Sort Merge  다량  O  O  조인 기준 컬럼으로 정렬되어 있다면 Hash Join보다 빠를 수도 있다.
     Hash Join  다량  X  O  반드시 Equi join일 경우에만 가능하다.

  4. 같은 Join 문장이 다음과 같이 여러 방법으로 처리될 수 있다.

    select *
    from emp e, dept d
    where e.deptno = d.deptno

     ----------------------------------------------------------------------------
     | Id  | Operation           | Name | Rows  | Bytes | Cost (%CPU)| Time     |
     ----------------------------------------------------------------------------
     |   0 | SELECT STATEMENT    |      |    14 |   868 |     8  (25)| 00:00:01 |
     |   1 |  MERGE JOIN         |      |    14 |   868 |     8  (25)| 00:00:01 |
     |   2 |   SORT JOIN         |      |     4 |   120 |     4  (25)| 00:00:01 |
     |   3 |    TABLE ACCESS FULL| DEPT |     4 |   120 |     3   (0)| 00:00:01 |
     |*  4 |   SORT JOIN         |      |    14 |   448 |     4  (25)| 00:00:01 |
     |   5 |    TABLE ACCESS FULL| EMP  |    14 |   448 |     3   (0)| 00:00:01 |
     ----------------------------------------------------------------------------


     ---------------------------------------------------------------------------
     | Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
     ---------------------------------------------------------------------------
     |   0 | SELECT STATEMENT   |      |    14 |   868 |     7  (15)| 00:00:01 |
     |*  1 |  HASH JOIN         |      |    14 |   868 |     7  (15)| 00:00:01 |
     |   2 |   TABLE ACCESS FULL| DEPT |     4 |   120 |     3   (0)| 00:00:01 |
     |   3 |   TABLE ACCESS FULL| EMP  |    14 |   448 |     3   (0)| 00:00:01 |
     ---------------------------------------------------------------------------

     
    ---------------------------------------------------------------------------
     | Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
     ---------------------------------------------------------------------------
     |   0 | SELECT STATEMENT   |      |    14 |   868 |     9   (0)| 00:00:01 |
     |   1 |  NESTED LOOPS      |      |    14 |   868 |     9   (0)| 00:00:01 |
     |   2 |   TABLE ACCESS FULL| DEPT |     4 |   120 |     3   (0)| 00:00:01 |
     |*  3 |   TABLE ACCESS FULL| EMP  |     4 |   128 |     2   (0)| 00:00:01 |
     ---------------------------------------------------------------------------



'오라클 > Tuning' 카테고리의 다른 글

Nested Loop 예제  (0) 2010.05.16
select * from t1 sort ? ㅋ  (0) 2010.05.09
Nested Loop  (0) 2010.05.08
Oracle Data Access Pattern  (0) 2010.05.08
Clustering Factor 란?  (0) 2010.05.06