- NL Join(Nested Loops join) : 중첩된 반복문, 랜덤 엑세스
2개 이상의 테이블에서 하나의 집합을 기준으로 순차적으로 상대방 row를 결합하여 원하는 결과를 조합하는 조인방식
조인해야할 데이터가 많지 않을 경우에 유용하게 사용됨
드라이빙 테이블로 한 테이블을 선정하고 이 테이블로부터 where절에 정의된 검색 조건을 만족하는 데이터를 걸러낸 후 이 값을 가지고 대상 테이블에 반복적으로 조인 조건을 만족하는 최종 결과값을 얻어냄
Driving Table이란 JOIN을 할 때 먼저 액세스 되어 ACCESS PATH를 주도하는 테이블을 Driving Table이라고 합니다. 즉, 조인을 할때 먼저 액세스 되는 테이블을 Driving Table이라고 하며 나중에 액세스 되는 테이블을 Driven Table이라고 합니다. 여기서 Driving Table은 옵티마이저가 결정하고 자연스레 Driving Table이 아닌 테이블은 Driven Table로 결정됩니다.
Nested Loops join의 장단점
1. 인덱스에 의한 랜덤 액세스에 기반하고 있기 때문에 대량의 데이터 처리시 적합하지 않음
2. driving table로는 데이터가 적거나 where절 조건으로 row의 숫자를 줄일 수 있는 테이블이어야함
3. driven table에는 조인을 위한 적절한 인덱스가 생성되어 있어야함
4. 선행 테이블의 결과를 통해 후행 테이블을 액세스 할때 랜덤 I/O가 발생
NESTED LOOP JOIN의 성능 개선 포인트
적절한 드라이빙 테이블의 선정
NESTED LOOP JOIN을 할때는 어떤 테이블이 먼저 액세스 되느냐에 따라서 속도의 차이가 크게 날 수 있습니다. 앞서 NESTED LOOP JOIN 동작 과정에서 살펴보았듯이 먼저 액세스 되는 Driving Table의 조건을 만족하는 결과 row수가 많다면 그만큼 반복해서 Driven Table에 접근해야 하므로 성능은 자연히 나빠질 것입니다. 따라서 NESTED LOOP JOIN방식을 채택하였다면 Driving Table의 선택이 매우 중요합니다. 그렇기에 Driving Table은 WHERE 절로 최대한의 데이터를 거를 수 있는 테이블이나 애초에 데이터의 양이 적은 테이블로 선정하는 것이 좋습니다.
인덱스 미존재 사용가능, 동등조인 비동등조인 가능