스칼라 서브쿼리 캐싱 효과
스칼라 서브쿼리로 조인하면 오라클은 조인 횟수를 줄이기 위해
- 입력 값과 출력 값을 Query Execution Cache에 저장해 두고,
- 같은 입력 값이 다시 나오면 조인을 다시 하지 않고 캐시된 값을 반환한다.
조인할 때마다 일다 캐시에서 ‘입력값’ 을 찾아보고, 찾으면 저장된 ‘출력값’ 을 반환한다.
캐시에서 찾지 못할 때만 조인을 수행하며, 결과는 버리지 않고 캐시에 저장해둔다.
이런 캐싱 메커니즘은 조인 성능을 높이는데 큰 도움이 된다.
메인쿼리 집합이 아무리 커도 조인할 데이터를 대부분 캐시에서 찾는다면, 조인 수행횟수를 최소화할 수 있기 때문이다.
따라서 값 종류가 적은 코드성 테이블(부서, 분류, 상품코드 등)과의 조인에서는 성능 향상에 도움이 될 수 있다.
- 주의:
- 스칼라 서브쿼리는 “반드시 1행만 반환”해야 하며, 그렇지 않으면 ORA-01427이 발생할 수 있다(원문에 해당 취지 존재).
- 조인 조건 Pushdown 같은 변환이 가능한 버전/상황에서는 더 단순한 형태로 해결 가능(뒤쪽 내용).