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 예약어는 안 좋은 실행 계획 성능이 나올 것