인프런 커뮤니티 질문&답변

김영동님의 프로필 이미지
김영동

작성한 질문수

데이터 분석 SQL Fundamentals

조인 실습 - 03

여러 테이블을 조인할 경우 성능 질문

작성

·

604

0

안녕하세요? 강사님 머신러닝 강의에 이어서 SQL 강의도 잘 보고 있습니다

질문이 있는데

가령 3개의 테이블을 join할 경우

테이블a join 테이블b join 테이블c 이렇게 순서대로 join하는 것과

테이블a와 테이블b를 join하고 그 결과를 서브쿼리로 해서 테이블 d로 만들고 테이블c와 join하는 것과 성능적인 측면에서는 차이가 없는건지 궁금합니다

 

답변 1

2

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

보통은 a, b를 인라인뷰 서브쿼리로 하고 테이블 c를 조인하는 것와 a, b, c를 그냥 조인하는 것은 실행 계획이 변경되거나 하지는 않는 경우가 대부분이기 때문에 성능은 동일합니다.

하지만 반드시 100% 일치한다고는 말할 수 없습니다.

조인의 성능은 고려해야 할 여러가지 중요 요소들이 있고, 이를 기반으로 DBMS내부에서 최적의 실행 계획은 다시 만들어 냅니다.

일반적으로 조인의 성능을 좌우하는 첫번째 중요 요소는 드라이빙 테이블(첫번째로 조인을 시작하는 테이블)의 선택입니다. 드라이빙 테이블을 잘 선택해서 다음 테이블을 조인 연결량을 줄이는 것이 필요합니다.

우리가 join 순서를 a, b, c로 SQL에 나열하였더라도 DBMS 내부에서 조인 연결량을 적게 수행 할 수 있는 최적의 드라이빙 테이블을 찾아내고 조인 순서를 그에 맞게 변경합니다.

a, b만 인라인 서브쿼리 d로 만들고 c로 조인하는 경우와 a, b, c가 정말 아무런 변경없이 내부 ( ) 정도만 바뀌는 거라면 실행 계획은 거의 바뀌지 않습니다만, 100% 그렇다고는 말씀 드릴 수 없습니다.

감사합니다.

김영동님의 프로필 이미지
김영동

작성한 질문수

질문하기