블록 중첩 루프
Block nested loopBlock Nested Loop(BNL; 블록네스트 루프)는 릴레이셔널 데이터베이스 [1]내의 2개의 관계를 결합하기 위해 사용되는 알고리즘입니다.
이[2] 알고리즘은 2개의 R "외부" 및 "" 결합 오퍼랜드)를 결합하기 위해 사용되는 단순 중첩 루프 결합의 변형입니다.만약 많은 예선 R{R\displaystyle}tuples다 예를 들어 R<>S{\displaystyle R<>S}. 전통적인 중첩 루프에서 함께 S{S\displaystyle}한번 R{R\displaystyle}의 모든 투플., 그리고 만약 S{\displ 조인 키에 적용할 수 있는 목록이 검색됩니다.aysty S 이 작업은 매우 비용이 많이 .
블록 네스트 루프 결합 알고리즘은R\ R 로 SS를 1회만 으로써 단순 네스트 루프 결합을 개선합니다.예를 들어, 블록 네스트 루프 조인의 한 변종은 RR의 페이지를 메모리에 읽어내 해시 테이블에 로드합니다.그런 다음S {\S를 스캔하고 해시 테이블을검색하여의 현재 페이지에 있는 Tuples 중 하나에 일치하는 S{\S} Tuples를 .이것에 의해, 필요한S {\S}의 스캔수가 감소합니다.
이 알고리즘의 보다 적극적인 변형은 사용 가능한 메모리에 가능한 한 많은 R{\ R 를 로드하고 이러한 모든 튜플을 해시 테이블에 로드한 다음S {\ S를 반복 스캔합니다.이것에 의해, 필요한 S{\ S의 수가 한층 더 감소합니다.사실 이 알고리즘은 기본적으로 고전적인 해시 [citation needed]조인 알고리즘의 특수한 경우입니다.
블록 네스트 루프는 O PM {{ O I/로 동작합니다.서M({ M은 내장 메모리의 사용 가능한 수, 및 })는 R입니다.페이지 단위로 표시하다 네스트 루프는R이 사용 가능한 내장 메모리에 적합한 Or + s)({O I/O로 됩니다.
레퍼런스
- ^ "8.2.1.14 Block Nested-Loop and Batched Key Access Joins". MySQL 5.6 Reference Manual. Oracle Corporation. Retrieved 2 August 2015.
- ^ "Block Nested Loop Join". MariaDB. MariaDB Corporation Ab. Retrieved 2 August 2015.