일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 우유아야
- 우유가옆으로넘어지면아야
- LeetCode #릿코드 #좋은 하루 되세요 #Have a nice day
- SeongSeobDang
- 자료구조
- have a nice day
- HAVE A GOOD DAY
- DP
- SSAFY 10기 화이팅
- 텐션 업 10기!
- SSAFY 테스트
- Have a good day :)
- 아자아자 화이팅
- SSAFY IM/A
- Hamming weight
- DFS
- 코로나 싫어요
- amazon
- 텐션 업 10기 화이팅
- 네트워크
- 수학
- BFS
- SSAFY 화이팅
- Have a nice day.
- Java 환경 설정
- 모르고리즘
- 우유가 옆으로 넘어지면 아야
- I am Korean
- 자고 싶다
- Today
- Total
Hope Everyone Is Happy
7. 조인의 원리 본문
본 게시글은 책 : 면접을 위한 CS 전공지식 노트 (출판사 : 길벗, 주홍철 지음) 을 참조하여 작성하였습니다. + 구글링
◆ 중첩 루프 조인 (NLJ, Nested Loop Join)
- 중첩 for문과 같은 원리로 조건에 맞는 조인을 하는 방법
- 랜덤 접근에 대한 비용이 많이 증가하므로 대용량의 테이블에서는 미사용
ex) "t1, t2 테이블을 조인한다." 라고 했을 때, 첫 번째 테이블에서 행을 한 번에 하나씩 읽고 그 다음 테이블에서도 행을 하나씩 읽어 조건에 맞는 레코드를 찾아 결괏값 반환
for each row in t1 matching reference key {
for each row in t2 matching reference key {
if row satisfies join conditions, send to client
}
}
- 참고 : 이를 발전시켜 조인할 테이블을 작은 블록으로 나눠서 블록 하나씩 조인하는 블록 중첩 루프 조인 방식도 존재
◆ 정렬 병합 조인
- 각각의 테이블을 조인할 필드 기준으로 정렬하고 정렬이 끝난 이후에 조인 작업을 수행
- 조인할 때 사용할 적절한 인덱스가 없을 때나, 대용량의 테이블들을 조인, 조인 조건으로 '<', '>' 등의 비교 연산자가 있을 때 사용
◆ 해시 조인
- 해시 테이블을 기반으로 조인
- 두 개의 테이블을 조인한다고 했을 때 하나의 테이블이 메모리에 온전히 들어간다면, 일반 중첩 루프 조인보다 효율적
( 메모리에 올릴 수 없을 정도로 크다면 디스크를 사용하는 비용이 발생 )
- 동등(=) 조인에서만 사용
- MySQL의 경우 MySQL 8.0.18 릴리즈와 함꼐 이 기능을 사용 가능
- MySQL의 해시 조인 단계는 빌드 단계, 프로브 단계로 구성
- 빌드 단계 : 입력 테이블 중 하나를 기반으로 메모리 내 해시 테이블을 빌드하는 단계
ex) person과 countries라는 테이블을 조인한다고 했을 때, 둘 중에 바이트가 더 작은 테이블을 기반으로 해서 테이블을 빌드
:조인에 사용되는 필드가 해시 테이블의 키로 사용 됨
(위 예시에서 'countries.country_id'가 키로 사용)
- 프로브 단계
: 레코드 읽기를 시작하며, 각 레코드에서 "person.country_id"에 일치하는 레코드를 찾아서 결과값으로 반환
: 이를 통해 각 테이블은 한 번씩만 읽게 되어 중첩해서 두 개의 테이블을 읽는 중첩 루프 조인보다 성능이 향상
: 사용 가능한 메모리양은 시스템 변수 join_buffer_size에 의해 제어되며, 런타임 시에 조정
이 책은 어떠한 독자를 생각하면서 작성한 것일까요?!
위의 글과 관련하여 추가적인 내용이나 피드백은 언제나 환영입니다 :)
'※ CS 스터디 > 데이터베이스' 카테고리의 다른 글
6. 조인(Join)의 종류 (0) | 2023.08.29 |
---|---|
4. 데이터베이스의 종류 (0) | 2023.08.29 |
3. 트랜잭션과 무결성 (0) | 2023.08.23 |
2. ERD와 정규화 과정 (0) | 2023.08.23 |
1. 데이터 베이스의 기본 (0) | 2023.08.23 |