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

'Develop > DB 일반' 카테고리의 다른 글

트랜잭션과 격리수준  (0) 2021.12.23
인덱스란  (0) 2021.12.23

+ Recent posts