DBMS에서JOIN을 수행 시드라이빙 테이블과드리븐 테이블로 구분되어JOIN 연산이 수행
。드라이빙테이블 : 드리븐 테이블=1:N
드라이빙 테이블( Driving Table = Outer Table )
。SQL Query에서JOIN시 가장 먼저ACCESS되어Access Path를 주도하는DB 테이블
。드라이빙 테이블은통계정보와인덱스를 기반으로레코드 수가 적은테이블을 우선으로옵티마이저에 의해 결정
▶FROM절의테이블이 무조건드라이빙 테이블은 아니다.
드리븐 테이블( Driven Table = Inner Table )
。드라이빙 테이블의 결과를 기반으로 나중에ACCESS되는테이블
。Nested Roof Join시드리븐 테이블에서는조인 조건 컬럼에 대해인덱스를 지정하여비용을 감소시키는게 중요
▶ 되도록내부 루프시 쿼리플랜 - type:REF로 지정되도록인덱스를 설정
드라이빙 테이블결정 조건
。JOIN시 어떤테이블이 먼저액세스되어드라이빙 테이블로 선정되었는지에 따라서 속도차이가 크게 발생할 수 있음
。옵티마이저는레코드 수와인덱스에 따른통계 정보를 기반으로 가장비용이 낮은테이블 조인 순서를 결정하여쿼리 플랜을 결정
레코드 수
。옵티마이저는 일반적으로 더작은 테이블을드라이빙 테이블로 선정
JOIN시 어떤테이블이 먼저액세스되어드라이빙 테이블로 선정되었는지에 따라서 속도차이가 크게 발생
ex )테이블 A : 5000만 레코드,테이블 B : 1000 레코드에서A와B를 조인 시
。테이블 A가드라이빙 테이블인 경우
▶Nested Loop join시5000만 번을 반복하면서B테이블을 탐색
。테이블 B가드라이빙 테이블인 경우
▶Nested Loop join시1000 번을 반복하면서A테이블을 탐색
。즉, 작업 대상이 되는레코드수가 적은테이블부터액세스되어드라이빙 테이블로 선정되어야외부 루프 수감소.
인덱스
。옵티마이저는SQL Query의WHERE또는ON 조건절에서 사용한인덱스 컬럼도 고려하여드라이빙 테이블을 결정
ex )인덱스 컬럼으로조인시드라이빙 테이블에서 한레코드를 가져와서내부 루프에서드리븐 테이블에서인덱스를 기반으로 빠르게 조회가능
예시
。o 테이블:주문 테이블로서 보통레코드가 많음.
▶o.member_id는FK로서FK 인덱스일 가능성이 높음
。m 테이블:회원 테이블로서주문 테이블에 비해레코드가 상대적으로 적음SELECT m.email as memberEmail, COUNT(*) as totalOrders, SUM(o.total_amount) as totalAmount, AVG(o.total_amount) as averageAmount FROM ch3_orders o JOIN ch2_members m ON o.member_id = m.id GROUP BY m.email HAVING SUM(o.total_amount) >= 100000 limit 100。
옵티마이저에 의해m : Driving Tableo : Driven Table로 설정될 가능성이 매우 높음.
▶외부 루프 수감소 및내부 루프에서o.member_id의FK 인덱스를 통해조인 조건에 맞는레코드검색이 효율적으로 수행
Nested Loop Join
。드라이빙 테이블에서외부 루프로서 한 행씩 순차적으로 읽으면서, 각 행에 대해드리븐 테이블에서내부 루프로서조인 조건에 맞는레코드를 검색하여조인하는메카니즘
▶MySQL에서테이블간조인시 가장 기본적인메카니즘
。드라이빙 테이블 각 행에 대해내부 루프에서조인 조건에 맞는드리븐 테이블의레코드를 검색 시조인 조건 컬럼에인덱스를 생성할 경우 쿼리플랜 type = REF를 통해드리븐 테이블에 접근하여 매우 낮은Cost로 원하는레코드를 도출
조인 과정
。드라이빙 테이블의외부루프에서 각행에 대해드리븐 테이블의내부루프를 수행하여조건 : ON 드리븐테이블.id = 드라이빙테이블.id를 만족하는행을 반환FOR EACH row in 드라이빙 테이블 : 외부루프 FOR EACH matching row in 드리븐 테이블 : 내부루프 IF join-condition matches THEN RETURN combined row
Nested Loop Join에서는외부루프 수가 성능을 좌우
。Nested Loop Join에서는드라이빙 테이블의 절대적인레코드 수가 적어외부루프 수가 적어야전체 탐색이 감소하여 성능이 좋아짐.