DATABASE/ORACLE
20190925
허도치
2019. 9. 25. 23:40
오늘은 대용량 파티션 테이블 여러개를 조인해야할 일이 있었는데 도무지 속도가 나질 않아서, 플랜을 떠보니 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