오늘은 대용량 파티션 테이블 여러개를 조인해야할 일이 있었는데 도무지 속도가 나질 않아서, 플랜을 떠보니 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
'DATABASE > ORACLE' 카테고리의 다른 글
[PL/SQL] 무작정 시작하기 (4) - CURSOR (0) | 2020.01.14 |
---|---|
[PL/SQL] 무작성 시작하기 (3) - LOOP, WHILE 반복문 (0) | 2020.01.13 |
[PL/SQL] 무작정 시작하기 (2) - IF 조건문 (0) | 2020.01.13 |
[PL/SQL] 무작정 시작하기 (1) - PL/SQL 이란? (0) | 2020.01.13 |
자주 사용하는 오라클 DML 정리 (0) | 2019.09.23 |
댓글