본문 바로가기

오라클16

서브쿼리 조인 서브쿼리 조인 1. 인라인 뷰 : FROM 절에 사용한 서브쿼리 2. 중첩된 서브쿼리 : WHERE 절에 사용한 서브 쿼리 3. 스칼라 서브쿼리 : 한 레코드당 정확히 하나의 값을 반환하는 서브쿼리다. 주로 SELECT-LIST에서 사용하지만 몇 가지 예외사항을 제외하면 컬럼이 올 수 있는 대부분 위치에 사용할 수 있다. 필터 오퍼레이션 서브쿼리를 필터 방식으로 처리하기 위한 힌트 no_unnest. 필터 오퍼레이션은 기본적으로 NL 조인과 처리 루틴이 같다. NL조인과 차이점은 필터는 캐싱기능을 갖는다는 점이다. 서브쿼리를 수행하기 전에 항상 캐시부터 확인한다. 필터 서브쿼리는 메인쿼리에 종속되므로 조인 순서가 고정된다. 항상 메인쿼리가 드라이빙 집합이다. 서브쿼리 Unnesting 힌트는 unnest.. 2021. 12. 11.
해시조인 해시조인 소트 머지 조인과 해시 조인은 조인 과정에 인덱스를 이용하지 않기 때문에 대량 데이터 조인할 때 NL조인보다 훨씬 빠르고, 일정한 성능을 보인다. NL 조인에 사용하는 인덱스는 영구적으로 유지하면서 다양한 쿼리를 위해 공유 및 재사용하는 자료구조다. 반면, 해시 테이블은 단 하나의 쿼리를 위해 생성하고 조인이 끝나면 곧바로 소멸하는 자료구조다. 결론적으로 해시조인은 다음 3가지 기준을 만족할 때 사용한다 (NL보다 조금 빠르다면 NL을 사용하라) 1. 수행 빈도가 낮고 2. 쿼리 수행 시간이 오래 걸리는 3. 대량 데이터 조인할 때 기본 메커니즘 1. Build 단계 : 작은 쪽 테이블을 읽어 해시 테이블을 생성한다. 조인 컬럼을 해시 테이블 키 값으로 사용한다. 해시 테이블은 PGA 영역에 할.. 2021. 12. 11.
소트 머지 조인 소트 머지 조인 조인 컬럼에 인덱스가 없을 때, 대량 데이터 조인이어서 인덱스가 효과적이지 않을 때, 옵티마이저는 NL 조인 대신 소트 머지 조인이나 해시 조인을 선택한다. 해시 조인의 등장으로 소트 머지 조인의 쓰임새가 예전만 못하지만, 해시 조인을 사용할 수 없는 상황에서 대량 데이터를 조인하고자 할 때 여전히 유용하다. 힌트 : use_merge(innerTable) 기본 메커니즘 1. 소트 단계 : 양쪽 집합을 조인 컬럼 기준으로 정렬한다. 2. 머지 단계 : 정렬한 양쪽 집합을 서로 머지한다. 1. PGA의 Sort Area영역에 조건의 결과 Outer Table을 조인컬럼 순으로 정렬한다. PGA에 담을 수 없을 정도로 크면 Temp 테이블스페이스에 저장한다. 2. PGA의 Sort Area영.. 2021. 12. 11.
NL조인 NL조인 NL조인 NL(Nested Loop)의 수행구조는 중첩 루프 수행 구조와 동일하다. (for문 안의 for문) 일반적으로 NL 조인은 Outer와 Inner 양쪽 테이블 모두 인덱스를 이용한다. Outer쪽 테이블은 사이즈가 크지 않으면 인덱스를 이용하지 않을 수 있다. 반면 Inner쪽 테이블은 인덱스를 사용해야 한다. 실행계획 위쪽 테이블 기준으로 아래쪽 고객 테이블과 NL 조인을 한다. NL조인 힌트는 /*+USE_NL(inner_table) USE_NL(inner_table2) USE_HASH(table3)*/ USE_NL(A, B, C, D)로 작성하면 네 개 테이블을 NL 방식으로 조인하되 순서는 옵티마이저가 스스로 정하도록 맡긴것이다. 앞에 LEADING(A, B, C, D)를 두면.. 2021. 12. 11.