devnoong.log
728x90

현상

Live 운영 테이블에 데이터가 존재하지 않고, 백업용 데이터로 만들어진 테이블에서 데이터를 산출해야하는 경우가 존재했다.

 

문제점

Live 테이블 데이터의 경우, 기본적으로 index나 partition이 되어있어 대량의 데이터를 산출할때 해당 조건들을 이용해서 산출을 진행했다.

 

하지만, 백업용 데이터이기때문에 별도로 구성된 index나 partition이 되어있지 않아 index힌트 이용할 경우 추출 시간이 오래 걸려 active session이 오래 살아 있어 문제가 될 가능성이 존재한다.

 

USE_HASH 사용

USE_HASH 힌트를 사용해 산출 시간을 단축시켰다.

 

USE_HASH 힌트는 Oracle에서 사용되는 옵티마이저 힌트 중 하나로, 해시조인을 강제로 사용하도록 지시하는 역할을 한다.

해시 조인은 두개의 테이블을 해시함수를 사용하여 조인하는 방식으로, 큰 테이블간의 조인이나 조인 조건에 인덱스가 없는 경우 유용하게 사용이 가능하다.

 

- 큰 테이블간의 조인

두 테이블중 적어도 하나가 매우 큰 경우에 해시 조인을 사용하는 것이 유리하다.

해시 조인은 임시 해시테이블을 생성하여 조인을 수행하므로 대량의 데이터가 있는 테이블 조인에 효과적이다.

 

- 인덱스가 없는 조인

조인 조건에 인덱스가 없는 경우에 해시 조인을 사용하며 성능 향상에 도움이 된다.

테이블에 인덱스를 생성하는 것이 어려운 상황이라면, 해시 조인을 고려해 볼 수 있다.

 

SELECT /*+ USE_HASH(A, B)*/ --해시 조인 사용해 A,B로 강제 순서 지정
FROM DUAL A , DUAL B

 

 

728x90

'DB > Oracle' 카테고리의 다른 글

[DB] ORACLE PARALLEL HINT 부여하기  (0) 2023.02.07
[DB] SELECT ~ FOR UPDATE 문 사용 법  (0) 2022.11.10
[DB] 힌트 예제 정리  (0) 2022.07.28
[DB] 힌트에 대해서  (0) 2022.07.27
[DB] INDEX에 대해서  (0) 2022.07.27