✔ 조인은 여러 개의 테이블을 연결해서 데이터를 출력하는 것을 말한다.
✔ 일반적으로 행들은 PK나 FK값의 연관에 의해 조인이 성립된다.
✔ PK, FK의 관계가 없어도 논리적인 값들의 연관만으로 조인이 성립되는 경우도 있다.
Nested Loop Join | - 선행 테이블에서 액세스한 각 값을 후행 테이블과 조인하는 방식 |
Sort Merge Join | - 조인 컬럼을 기준으로 데이터를 정렬하여 조인을 수행하는 방식 |
Hash Join | - 해시 함수를 이용해서 데이터를 조인하는 방식 |
✔ 프로그래밍에서 사용되는 중첩된 반복문과 유사한 방식의 조인
✔ 한 테이블에서 데이터를 먼저 찾고 다음 테이블을 조인하는 방식
✔ 먼저 선행테이블의 조건을 만족하는 행을 추출하여 후행 테이블을 읽으면서 조인을 수행
✔ 한 테이블에서 데이털르 먼저 찾고 다음 테이블을 조인하는 방식
✔ 외부 테이블을 먼저 조회한 후, 내부 테이블 다음에 조회함
✔ 결과를 가능한 빨리 화면에 보여줘야하는 온라인 프로그램에 적당
✔ 랜덤 방식으로 액세스
✔ RANDOM ACCESS 양을 줄여야 성능 향상
✔ 부분 범위처리가 가능한 상황에서 응답 속도가 개선됨
✔ 조인 컬럼의 인덱스 여부에 따라 효율이 달라짐
✔ 대량의 데이터는 비효율적
✔ 조인 조건의 인덱스 유무에 영향을 받지 않아 NL Join이 비효율 일 때 사용
✔ 사전 Sorting 작업이 필요
✔ 대용량 데이터를 정렬하여 조인
✔ 동등 조인, 비동등 조인에서 모두 사용가능
✔ 먼저, 2개의 테이블을 SORT_AREA라는 메모리 공간에 모두 로딩함
✔ 데이터를 정렬하여 조인을 수행하는 방식
✔ 데이터양이 많으면 임시영역에서 수행 -> 정렬 때문에 성능 저하
✔ Sort 단계 : 2개 테이블에 대해 정렬 수행 (컬럼 기준)
✔ Merge 단계 : 정렬 후, 2개 테이블(집합)을 병합
✔ 기본키와 외래키 관계에서 외래키에 인덱스가 없을 때 Sort Merge Join이 NL Join보다 효율적이다.
✔ 두개의 테이블을 Sort 한 후 Merge를 한다.
Merge가 완료되면 한번의 Full Scan으로 데이터를 검색한다.
✔ 테이블 2개를 조인하여 결과를 가져와야 한다
✔ 2개 테이블에는 인덱스가 없음
✔ 각 테이블에 INDEX가 반드시 필요한 것은 아님
✔ 일반적으로 작은 테이블을 MEMORY에 올리는 선행 테이블로 사용
✔ 조인 컬럼의 인덱스가 존재하지 않더라도 사용할 수 있음
✔ 2개 테이블 중, 작은 테이블을 Hash 메모리에 로딩
✔ 동등 조인(=)에서만 사용할 수 있는 제약이 존재
✔ Sort Merge Join 하기에 두 테이블이 너무 커서 정렬 부하가 심할 때는 Hash Join이 유용하다
✔ 해시함수를 사용하여 주소를 계산함
✔ 해시함수를 이용해서 조인 컬럼의 동일한 해시값을 갖는 데이터를 조인하는 방식
✔ 주소를 사용하므로 CPU 연산을 많이함