BNL Join 사용
129
投稿した質問数 12
SELECT EMP.emp_id, EMP.first_name, EMP.last_name, GRADE.grade_name
FROM GRADE, EMP; -- 카테시안 곱
mariadb로 실습을 진행했는데
hash join이 쓰이는게 아니라
flat, BNL join을 사용한다고 되어 있네요?
BNL Join은 MySQL이 인덱스가 없거나 사용할 수 없는 상황에서 기본적으로 사용하는 비효율적인 조인 알고리즘이라는데 원인이 무엇일까요?
grade 테이블을 hash join table로 사용하지 않네요?
回答 1
0
안녕하세요, 인프런 AI 인턴입니다.
Anfield님,
BNL(블록 내스트-루프) 조인은 인덱스를 사용할 수 없거나 인덱스가 없는 경우 MySQL에서 기본적으로 사용하는 조인 알고리즘입니다. 이 알고리즘은 두 테이블을 모두 읽어서 각 행을 비교하여 매칭하는 방식으로 동작합니다. 이는 테이블 크기가 클수록 비효율적일 수 있습니다.
MariaDB나 MySQL에서 Hash Join이 아닌 BNL Join이 사용될 수 있는 이유는 다음과 같습니다:
인덱스 부재: 인덱스가 존재하지 않거나, 쿼리에서 인덱스를 사용하지 못할 때 BNL Join이 선택될 수 있습니다. 인덱스가 없으면 테이블 내의 모든 행을 직접 비교하여 매칭해야 하므로 BNL Join이 더 적합한 옵션이 됩니다.
큐브 관리 및 설정: 데이터베이스 설정이나 버전 차이에 따라 특정 조인 방식이 강제로 선택될 수도 있습니다. 예를 들어, 특정 MariaDB 설정에서는 Hash Join을 지원하지 않거나 기본적으로 비활성화되어 있을 수 있습니다.
테이블 크기: 조인 순서나 테이블의 상대적 크기에 따라 상대적으로 작은 테이블을 드라이빙 테이블로 선택하는 것이 더 효율적일 수 있습니다. 하지만 BNL Join은 모든 경우에 비효율적일 수 있으므로, 가능한 경우 인덱스를 생성하거나 쿼리 최적화를 통해 다른 조인 전략을 활용해야 합니다.
SQL 튜닝을 통해 쿼리 성능을 향상시키기 위해서는 인덱스를 적절히 배치하고, 쿼리 플랜을 분석하여 효율적인 조인 방식을 선택하는 것이 중요합니다.
더 많은 정보를 원하시면 MariaDB 조인 최적화 문서를 참고하시면 좋을 것 같습니다.
패키지 구분에 대해 궁금한게 있습니다
0
11
1
노션 링크도 안 열리고, 알려준 vercel도 실행이 안됩니다.
0
11
1
Substack 1년 제공
1
22
3
특별 학습 자료 프로모션 1년 멤버십 무료 제공 문의드립니다
0
27
2
스프링부트 서버 에러나요
0
17
1
코드를 첨부해야하는 이유가 있나요?
0
21
2
간단한 오타 제보입니다.
0
19
1
큰 범위 조회 시 EXPLAIN의 rows 값이 정확하지 않은 이유가 궁금합니다.
0
35
2
실제 FK제약조건을 설정하지 않는이유
0
37
2
조회속도 개선에서 더 개선하는 방법이 궁금합니다.
0
28
2
Sequence 관련 질문
1
32
2
Image Only Query
1
29
2
Free Edition 실습 영상은 아직 업데이트전인가요?
0
22
1
라이브 운영중인 환경의 테이블에 인덱스 추가시 고려사항
0
36
2
상품 정보 크롤링
0
29
2
JPA Repository 질문이 있습니다!
1
34
2
페이지네이션 처리를 쿼리에서 하는 방식 질문
1
36
1
수강기간 연장
0
27
1
FTS 방식으로 수행하는 나쁜 SQL 에서 질문이 있습니다.
0
53
0
7-8 질문
0
55
1
다음과 같은 쿼리가 더 좋은 결과를 보이는데 이유가 뭔지 궁금합니다.
0
139
1
rollup mariadb 11 ver 기준
0
128
1
use index, force index 힌트 질문
0
232
1
select_type 에서 'simple' 경우 각각의 테이블이 '드라이빙' 또는 '드리븐' 인지 어떻게 알수 있나요?
0
106
0

