- 조인이란: 두개 이상의 테이블에 대해서 결합하여 나타낼 때 조인을 사용
- 방식(물리적)
- Inner
- 두 개의 테이블에서 공통된 요소들을 통해 결합하는 조인(교집합)
- outer
- Left
- 왼쪽 테이블 기준으로 공통영역을 포함하여 조인
- Right
- 오른쪽 테이블 기준으로 공통영역을 포함하여 조인
- Full
- Cross
- 카티션 프로덕트라고 불리며 조인하는 테이블의 모든 경우의 수를 산출한 조인
- Self
- 동일한 테이블을 대상으로 조인
- 종류(논리적)
- NL
- 설명
- 랜덤 엑세스 방식(인덱스 스캔 방식)으로 데이터를 읽음
- 대량의 데이터를 접근하면 i/o 부하로 인해 무조건 좋은것은 아니나 온라인 프로그램에서 많이 사용됨
- 순서를 반복하는 구문으로 프로그래밍에서 반복문과 유사한 방식임
- 순서
- 선행 테이블에서 조건을 만족하는 첫 번째 행을 찾음
- 선행 테이블의 조인 키를 가지고 후행 테이블에 조인 키가 존재하는지 확인
- 후행 테이블의 인덱스에서 선행 테이블의 조인 키가 존재하는지 확인
- 인덱스에서 추출한 레코드 식별자를 이용하여 후행 테이블을 엑세스
- 반복
- 성능개선 포인트
- 선행 테이블(드라이빙 테이블)의 크기가 작을 수록 유리 하여 테이블 순서 조정
- 후행 테이블의 인덱스 여부 확인
- 결과 값이 많다면 다른 조인 방식으로 힌트처리
- Merge
- 설명
- 조회의 범위가 많을 떄 주로 사용하는 조인
- 양 쪽 테이블에 각각 접근 하여 그 결과를 정렬하고 정렬된 결과를 차례로 스캔하면서 연결고리의 조건으로 머지하는 방식
- 주로 조인조건컬럼에 인덱스가 없거나 결과값이 많을 때 사용됨
- 조회 범위가 좁을떄 유리한 NL조인과 장단점이 상이함
- 순서
- 각 테이블의 데이터를 동시에 독립적으로 먼저 읽음
- 읽혀진 테이블의 데이터를 조인을 위한 정렬
- 정렬된 각 테이블의 데이터를 조인
- 성능개선 포인트
- Access 속도 향상
- 테이블 엑세스 시 FTS, index range scan 등 테이블 접근에 대한 최적화
- 정렬 속도 향상
- 정렬된 조인 조건 컬럼 사용
- 양쪽의 정렬 완료 속도를 동일하게 맞춰줌
- 머지할 두 테이블의 데이터 양이나 속도를 최대한 맞춰줌
- Sort_area_size 최적화
- 적당한 사이즈로 설정
- Hash
- 설명
- 조인할 테이블에 대해 해시 버킷을 생성 하여 순서대로 결과가 출력
- 조인될 두 테이블 중 하나를 해시 테이블로 선정하여 조인될 테이블의 조인 키 값을 해시 알고리즘으로 비교하여 매치되는 결과 값을 얻는 방식
- 비용기반 옵티마이저를 사용할 때만 사용 될 수 있는 조인방식이며 = 비교를통한 조인에서만 사용
- 주로 많은 데이터를 조인해야할 때 사용
- 순서
- 두 집합 중 작은 집합을 읽어 해시 공간에 테이블을 생성
- 반대쪽 큰 집합을 읽어 해시 테이블을 탐색하면서 조인
- 해시 함수에서 리턴 받은 버킷 주소로 찾아가 해시 체인을 스캔하며 데이터를 찾음
- 성능개선 포인트
- 해시 테이블을 만드는 과정을 효율화
- 해시 테이블을 만드는 비용이 수반되므로 outer table 이 hash area에 담길 정도로 충분히 작고 중복이 없어야함
- cpu성능 개선
- 해시 버킷이 조인 집합에 구성되어 해시 함수 결과를 저장해야하는데 HASH_AREA_SIZE에 지정된 크기만큼 메모리가 할당되어 사용됨
- Cpu 자원이 넉넉하면 다른 조인보다 좋은 효율을 내지만 부족한 상황에선 느릴 수 있음
- 충분한 메모리 확보
- 해시 조인에 사용되는 최대 메모리 사이즈를 최적화