콘텐츠로 이동

2023 02 21

2023-02-21

JOIN

  • 개요
    • 두 개 이상의 테이블을 Relational Key로 연결하여 Merge 하는 것
    • 한 DB내의 여러 테이블 레코드를 조합해 하나의 열로 표현
  • 종류
    • Nested Loop Join
      • MySQL 5.x 까지의 조인 방식
      • Driving 테이블에서 조건에 만족하는 레코드 검색 후, 결합 조건에 일치하는 레코드를 Driven Table에서 조인
    • Hash Join
      • MySQL 8.0.18 부터 지원
      • 해시테이블을 사용해 두 입력간에 일치하는 행을 찾는 조인을 실행
  • Nested Loop Join
    • 선행 테이블의 처리범위가 액세스할 데이터량을 결정
    • 후행 테이블의 처리 범위는 종속적
    • Random Access 방식으로 처리
    • 부분범위처리에 유리
    • 처리량이 적은 경우에 유리
    • 연결고리에 반드시 index 필요
    • 선행 테이블의 처리 범위가 수행속도에 절대적 영향 미치기에 조인 순서가 중요
    • 요약
      • 처리방식: 순차적
      • Access 방식: Random Access
      • 연결 고리: 절대 영향
      • Join 방향: 영향 큼
      • 처리량: 좁은 범위에 유리
      • 주요 체크 요소: 연결 고리 상태 및 처리량
  • Hash Join
    • 해시테이블을 사용해 두 입력간에 일치하는 행을 찾는 조인 실행 방법
    • 테이블 중 하나가 메모리에 들어갈 수 있다면, Nested Loop Join보다 효율적
      • 메모리 사용량은 join_buffer_size를 사용해 제어
      • 초과하면 디스크 파일 사용해 처리
    • 요약
      • 처리방식: 반 부분범위
      • Access 방식: Hash Table
      • 연결 고리: 영향 없음
      • Join 방향: 영향 있음
      • 처리량: 넓은 범위에 유리
      • 주요 체크 요소: join_buffer_size

SQL Tips

  • or 예약어는 안 좋은 실행 계획 성능이 나올 것