BNL Join

Hoo-Sung.Lee·2024년 9월 11일
0

Database

목록 보기
16/18

BNL Join 이란?

블록 중첩 루프 조인(Block Nested loop join)은 기존 NL의 효용성을 높이기 위해서 탄생하였다.
BNL 방식은 별도의 버퍼인 조인 버퍼을 이용하여 드라이빙 테이블의 레코드를 조인 버퍼에 저장한 후 드리븐 테이블(후행 테이블)을 스캔하면서 조인 버퍼를 탐색하는 방식이다.

당연히 BNL 을 사용하지 않는 NL보다는 빠르다. 하지만 NL 조인에 대한 차선책일 뿐, 근본적인 해결책은 아니다.

BNL 알고리즘의 원리를 다시 설명 하자면, 드라이빙 테이블의 결과를 조인 버퍼에 저장하고 메모리 루프(드리븐 테이블)의 각 행을 전체 버퍼의 레코드와 비교하여 내부 루프의 스캔 횟수를 줄일 수 있다.

간단한 예를 들면 드라이빙 테이블의 결과 루프의 결과 집합에는 1000 행의 데이터가 있고, 드리븐 테이블(내부 테이블)은 NL 조인 알고리즘을 사용하게 된다면 1000번 스캔해야 하지만 BNL 알고리즘을 사용하는 경우 예를 들어 100개 행 집합을 비교한다면 먼저 드라이빙 테이블 결과를 조인 버퍼에 설정하고 저장한 다음, 드라이븐 테이블의 각 데이터 행을 사용해 100개의 행의 결과 집합(조인 버퍼)와 비교한다.

한 번의 100개의 데이터 행(조인 버퍼)와 비교할 수 있으므로, 내부 테이블에는 실제로 1000/100 = 10회로 루프 순환하면서 NL Join 보다 9/10 감소하게 된다.

profile
Working towards becoming Backend-Developer

0개의 댓글