oracle 34
- MySQL·Oracle 의 통계 처리 차이를 파고든 기록
- 잘못 박힌 Hash Join 힌트로 만든 44배 차이
- EXISTS 서브쿼리에 NO_UNNEST + PUSH_SUBQ 적용
- SUM 집계를 SUM OVER 분석함수로 변환
- 분석함수 — MAX 집계를 RANK OVER 함수로 변환
- View Merging 으로 얻는 이익
- UNION ALL 을 PARTITION BY 로 변환 (Partition Outer Join)
- UNION ALL 을 GROUPING SETS 로 변환
- UNION ALL 사용시 공통으로 사용하는 테이블을 분리
- SubQuery Unnesting
- Star Transformation 을 이용해 Fact 테이블과 Dimension 테이블 Join
- SEMI JOIN 시 Driving 테이블로 변경 (Driving Semi Join)
- Scalar Subquery
- Scalar Subquery 와 일반 Join 간의 변환 시 1대M 관계 정의 (일반 조인을 Scalar Subquery 로)
- Scalar Subquery Filter Push Down 으로 풀어내기
- PLAN Right Deep Tree VS Left Deep Tree (공식화)
- Paging 처리할 때 Join 전 먼저 Paging 처리하여 Join 부하 감소
- Join Predicate Push Down(JPPD)
- Join Predicate Push Down(JPPD) 는 UNION ALL & UNION VIEW 가 있을 때 가능
- Join Predicate Push Down (JPPD) 는 Semi Join 상황에도 SubQuery 에 침투 가능
- Join Predicate Push Down (JPPD) 는 Group By 가 있는 View 도 침투 가능 (2)
- Join Predicate Push Down (JPPD) 는 Group By 가 있는 View 도 침투 가능 (1)
- HASH Semi Join
- HASH JOIN 에 SWAP_JOIN_INPUTS 사용
- HASH JOIN 시 Left Deep Plan 이 안될 때 Bushy Tree Plan 유도
- Group By Push Down
- FULL OUTER JOIN 을 UNION ALL + NOT EXISTS 로 변환
- FILTER PUSH DOWN 을 위해 ROWNUM, RANK 제거
- EXISTS 로 JOIN 조건을 대체 (Filter)
- EXISTS 로 DISTINCT 구문을 대체 (Filter, Semi Join)
- DISTINCT 를 INDEX UNIQUE SCAN으로 제거
- DISTINCT 를 1대N 관계 에서 N 을 Nested Subquery 로 전환해 제거 (2)
- DISTINCT 를 1대N 관계에서 N 을 Nested Subquery 로 전환해 제거 (1)
- COUNT(컬럼) 을 COUNT(*) 로 대체