본문 바로가기
DATABASE/ORACLE

20190925

by 허도치 2019. 9. 25.

오늘은 대용량 파티션 테이블 여러개를 조인해야할 일이 있었는데 도무지 속도가 나질 않아서, 플랜을 떠보니 Lested Loops 조인을 타고 있었다.

 

SELECT A.USER_ID

            , A.DEPT_ID

            , B.DEPT_NAME

   FROM EMP_T A

  INNER JOIN DEPT_T B

        ON B.DEPT_ID = A.DEPT_ID

  WHERE 1=1

 

Lested Loops 조인은 프로그래밍의 반복문처럼 소스 테이블을 기준으로 타겟 테이블을 반복하면서 조인을 한다.

 

for ( int i = 0; i < n; i ++) {

    for ( int j = 0; j < m; j++) {

        ....

    }

}

 

따라서, 대용량 테이블을 조인할 경우 비효율적으로 테이블에 접근하기 때문에 추천하지 않는다.

 

직접 쿼리를 짜보면서 느낀바로는 대용량 테이블에서 조인할 때는 Hash Join으로 처리하는 것이 가장 빨랐다.

 

SELECT /*+ USE_HASH( A B ) */

             A.USER_ID

           , A.DEPT_ID

          , B.DEPT_NAME

   FROM EMP_T A

  INNER JOIN DEPT_T B

        ON B.DEPT_ID = A.DEPT_ID

  WHERE 1=1

댓글