조인 튜닝 - 이중 반복문 튜닝
NL 조인 - 소용량(인덱스), 조인의 기본
NL 조인의 특징 : 랜덤 액세스 위주의 조인 방식
소트 머지 조인 - 대용량, Temp디스크를 최대한 안쓰기
PGA : 개인 작업 메모리, 다른 프로세스와 공유하지 않는 독립적인 메모리 공간(Lock 필요X), SGA에서 읽을 때 보다 훨씬 빠르다.
기본 메커니즘
1. 소트 단계(인덱스가 없어서 (PGA에서)소트) : 양쪽 집합을 조인 컬럼 기준으로 정렬
2. 머지 단계(조인) : 정렬한 양쪽 집합을 서로 머지한다.
정렬한 결과집합이 PGA에 담을 수 없을 정도로 크면, Temp 디스크에 저장
해시 조인 - 대용량
기본 메커니즘
1. Build 단계 : (Build Input)작은쪽 테이블(맵으로 변환)을 읽어 해시 테이블(해시 맵)을 생성한다. - PGA에 생성
2. Probe 단계 : 큰 쪽 테이블을 읽어 해시 테이블 탐색하며 조인
해시 조인이 빠른 이유 : PGA를 쓰고 Lock을 안걸어서 빠름
대용량 Build Input처리 : 나눠서 정렬한다.
조인 메서드 선택 기준
소량 데이터 조인 : NL조인
대량 데이터 조인 : 해시 조인
대량 데이터 조인인데 해시 조인으로 처리할 수 없을 때(조건식이 등치(=)가 아닐때) : 소트 머지 조인
(최적화된)NL 조인과 해시 조인 : 성능이 같으면 NL 조인
해시 조인이 약간 더 빨라도 NL 조인
NL조인보다 해시 조인이 매우 빠른 경우, 해시 조인
서브쿼리 조인
인라인 뷰 : FROM 절에 사용한 서브쿼리
중첩 서브쿼리 : WHERE 절에 사용한 서브쿼리
상관 서브쿼리 : 서브쿼리 내부에서 메인쿼리의 컬럼을 참조하는 형태
스칼라 서브쿼리 : 한 레코드당 정확히 하나의 값을 반환하는 서브쿼리, 실행 시 캐싱 됨(함수도 캐싱됨), 기본 256개 엔트리 캐싱
스칼라 서브쿼리의 제약 : 두 개 이상의 값을 반환할 수 없다.
필터 오퍼레이션
필터 캐싱 : 서브쿼리 입력 값에 따른 반환 값을 캐싱하는 기능
세미 조인(exists) : 존재 여부만 확인하는 조인 방식
서브쿼리 unnest : 서브쿼리 간의 계층구조를 풀어 서로 같은 레벨로 만들어 준다.
서브쿼리 필터링 : 서브쿼리 필터링을 먼저 처리함으로써 조인 단계로 넘어가는 로우 수를 크게 줄일 수 있다면 성능은 그만큼 향상된다.
서브쿼리 push : 서브쿼리의 필터링 기능을 미리처리 하도록 강제하는 기능, unnest와 함께 사용 불가능
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
소트 튜닝
메모리 소트 : 전체 데이터의 정렬 작업을 메모리 내에서 완료하는 것
디스크 소트 : 할당받은 Sort Area 내에서 정렬을 완료하지 못해 디스크 공간까지 사용하는 것
소트 오퍼레이션
Sort Aggregate : 전체 로우 대상 집계 수행시 나타난다, 실제로 데이터를 정렬하지 않고, Sort Area를 사용한다는 의미
Sort Order By : 데이터를 정렬할 때 나타난다.
Sort Group By : 소팅 알고리즘을 사용해 그룹별 집계를 수행할 때 나타난다.
그룹핑 결과의 정렬 순서 : 정렬된 그룹핑 결과를 얻고자 한다면, 반드시 Order By를 명시해야 한다.
Sort Unique : 중복 레코드 제거 수행시 나타난다.(Union, Minus, Intersect, Distinct 등)
Distinct(중복 제거) : 오라클 10gR2부터 Hash Unique방식으로 변경, O(n)
Sort Join : 소트 머지 조인 수행시 나타난다.
Window Sort : 윈도우 함수 수행시 나타난다.
소트가 발생하지 않는 SQL 작성
Union vs Union All
Union : 두 집합 간 중복을 제거하기 위해 소트 작업 수행
Union All : 중복을 확인하지 않고 두 집합을 결합
Exists 활용
Distinct : 조건에 해당하는 데이터를 모두 읽어서 중복 제거
Exists : 데이터 존재 여부만 확인
조인 방식 변경
Hash Join : Order By 시 Sort 생략 불가능, Group By 시 Sort 생략 가능(Hash Grouping 사용 시)
NL Join : Order By 시 Sort 생략 가능(정렬된 인덱스 사용 시), Group By 시 Sort 생략 가능(인덱스 + Group By 컬럼 일치 시)
Sort-Merge Join : Order By 시 Sort 생략 가능(내부 정렬이 되있을 시), Group By 시 Sort 생략 가능(내부 병합 정렬 시)
'요약' 카테고리의 다른 글
11. 데이터 베이스 요약 - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.04.01 |
---|---|
10. 데이터 모델링 요약(2) - 패스트캠퍼스 백엔드 부트캠프 3기 (1) | 2025.04.01 |
8. SQL튜닝 요약(2) - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.04.01 |
7. 데이터 모델링 요약(1) - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.03.11 |
6. SQL튜닝 요약(1) - 패스트캠퍼스 백엔드 부트캠프 3기 (1) | 2025.03.07 |