반응형
조인 알고리즘
- MiriaDB 5.3 이전 : 네스티드 루프 알고리즘만 사용
- MiriaDB 5.3 이후 : 다양한 형태의 알고리즘 도입. 활용율은 높지 않지만 개선중.
- MiriaDB 5.3 부터 지원되는 알고리즘의 종류
- 단순 네스티드 루프(Simple Nested Loop)
- 블록 네스티드 루프(Block Nested Loop)
- 블록 네스티드 루프 해시(Block Nested Loop Hash)
- 블록 인덱스(Block Index Join, Batched Key Access)
- 블록 인덱스 해시(Block Index Hash Join, Batched Key Access Hash)
블럭 기반 조인 알고리즘의 종류 8가지
join_cache_Incremental=offjoin_cache_hashed=offjoin_cache_bka=offjoin_cache_level(0~8)
1.Block Nested Loop - Flat) | on | on | on | on:1~8, off=0~0 |
2.Block Nested Loop - Incremental) | off | on | on | on:2~8, off=0~1 |
3.Block Nested Loop Hash - Flat) | on | off | on | on:3~8, off=0~2 |
4.Block Nested Loop Hash - Incremental) | off | off | on | on:4~8, off=0~3 |
5.Batched Key Access - Flat) | on | on | off | on:5~8, off=0~4 |
6.Batched Key Access - Incremental) | off | on | off | on:6~8, off=0~5 |
7.Batched Key Access Hash - Flat) | on | off | off | on:7~8, off=0~6 |
8.Batched Key Access Hash - Incremental) | off | off | off | on:8~8, off=0~7 |
조인 캐시 레벨(join_cache_level) (MariaDB)
- 블럭 기반 조인 알고리즘의 활용 방식
- Flat 방식 : 조인버퍼에 레코드 필드를 복사하는 방식
- Incremental 방식 : 포인터만 조인버퍼에 저장하는 방식
- 블럭 기반 조인 알고리즘의 종류 8가지
- 1. 블록 네스티드 루프(Block Nested Loop - Flat)
- 2. 블록 네스티드 루프(Block Nested Loop - Incremental)
- 3. 블록 네스티드 루프(Block Nested Loop Hash - Flat)
- 4. 블록 네스티드 루프(Block Nested Loop Hash - Incremental)
- 5. 배치 키 엑세스(Batched Key Access - Flat)
- 6. 배치 키 엑세스(Batched Key Access - Incremental)
- 7. 배치 키 엑세스(Batched Key Access Hash - Flat)
- 8. 배치 키 엑세스(Batched Key Access Hash - Incremental)
- 알고리즘 선택 optimizer_switch 변수 3가지 기본 설정값
- join_cache_Incremental=on
- join_cache_hashed=on
- join_cache_bka=on
- join_cache_level 시스템 변수
- join_cache_level=1 (0~8)
- 설정된 값 이하 번호만 수행 가능
- batched_key_access (MySQL)
- 기타 조인시 optimizer_switch
- outer_join_with_cache
- semijoin_with_cache
조인 버퍼 설정
SET optimizer_switch='optimizer_join_buffer_size=on';
SET join_cache_space_limit=5*1024*1024;
- 설정된 5M 한도 내에서 적절하게 필요한만큼 메모리 공간 할당
반응형