본문 바로가기

성능고도화54

04 쿼리변환 - 서브쿼리 Unnesting 쿼리변환이란? 결과가 동일하더라도 SQL문을 여떤 형태로 작성하느냐에 따라 성능에 차이가 날 수 있으며 쿼리 옵티마이저가 SQL을 분석해 의미적으로 동일하면서도 더 나은 성능이 개대되는 형태로 재작성하는 것을 말합니다. 옵티마이저의 서브엔진으로서 Query Transformer,Estimator,Plan Generator가 있는데 이중 Query Transformer가 그 역할을 담당합니다. 쿼리변환은 두가지 방식으로 작동합니다. 휴리스틱 쿼리변환 : 결과만 보장된다면 무조건 쿼리변환을 수행합니다. 일종의 규칙기반 최적화기법이라고 할 수 있습니다. 비용기반 쿼리변환 : 변환된 쿼리의 비용이 더 낮을 때만 그것을 사용하고, 그렇지 않을 때는 원본 쿼리 그대로 두고 최적화를 수행합니다. 서브쿼리 Unnest.. 2021. 8. 30.
CH02. 조인 원리와 활용 - 05.Outer 조인 (1)Outer NL 조인 NL 조인은 그 특성상 Outer 조인할 때 방향이 한쪽으로 고정되며, Outer기호(+)가 붙지 않은 테이블이 항상 드라이빙 테이블로 선택됩니다. leading 힌트를 이용해 순서를 바꿔보려고 해도 소용 없습니다. select /*+ leading(e) use_nl(d) */ * from dept d, emp e where e.deptno(+)=d.deptno; select /*+ use_nl(d e) */ * from dept d, emp e where e.deptno(+)=d.deptno; 위아래 쿼리 같은 실행계획이 나옵니다. --------------------------------------------------------------------------- | Id .. 2020. 6. 2.
CH02. 조인 원리와 활용 - 04.조인 순서의중요성 조인 순서에 따라 쿼리 수행 성능이 달라질 수 있습니다. 각 조인에 대해서 살펴보겠습니다. NL조인 NL조인에서는 무엇보다 Random 액세스 발생량에 의해 성능이 좌우되는데, 필터조건이 없는 경우에는 드라이빙테이블(조인시 먼저 ACCESS되는 테이블)은 작은 쪽 집합을 드라이빙하는 것이 유리합니다. 필터 조건이 있는 경우에는 인덱스 구성에 따라 유,불리가 경정되며, 비효율이 없게끔 인덱스를 잘 구성해 주기만 하면 역시 작은 쪽 집합을 드라이빙하는 것이 유리합니다. NL조인에서는 Random액세스 발생량 외에도 Inner 쪽 인덱스 구성 및 조건절 연산자 형태에 따라 성능이 크게 좌우되는데, 인덱스 스캔 효율에 차이가 생기기 때문입니다. 소트머지 조인과 해시 조인 소트머지 조인과 해시조인에서도 순서가 중.. 2020. 6. 2.
CH02. 조인 원리와 활용 - 03.해시조인 (1)기본 매커니즘 7.3버전에서 처음 소개된 해시 조인은 소트 머지 조인과 NL조인이 효과적이지 못한 상황에 대한 대안으로 개발되었습니다. 해시 조인은 둘 중 작은 집합(Build input)을 읽어 Hash Area에 해시 테이블을 생성하고, 반대쪽 큰 집합(Probe input)을 읽어 해시 테이블을 담색하면서 조인하는 방식입니다. 해시조인은 해시테이블을 생성할 때 해시함수를 사용합니다. 즉, 해시 함수에서 리턴받은버킷 주소로 찾아가서 해시 체인에 엔트리를 연결합니다. 해시 테이블을 탐색할 때도 해시 함수를 사용합니다. 해시 함수에서 리턴받은 버킷 주소로 찾아가서 해시 체인을 스캔하면서 데이터를 찾습니다. 해시 조인은 NL조인처럼 조인과정에서 발생하는 Random 액세스 부하가 없고(양쪽 집합을 읽.. 2020. 5. 28.