SELECT t1.*
FROM t1
INNER JOIN t2
on t1.a = t2.a
예를 들어 위와 같은 조인 구문이 있다고 가정하자.
"이중 for loop"를 생각하면 Nested Loop Join을 이해하기 쉽다.
예를 들어, t1의 a항목에 1이라는 값이 있다고 가정하자.
그러면, 그 다음 t2의 a항목에 존재하는 모든 값들에 대해 1이 존재하는지 찾으면서 결합을 진행하는 것이다.
흔히, 아는 다음의 이중 루프 알고리즘을 생각하면 된다.
for a in t1 :
for b in t2 :
if a == b :
blar blar blar
그래서, 스캔할 테이블의 크기에 속도가 많이 좌우되고, 이에 따라 join key에 어떤 index가 포함되는지가 중요하다고 할 수 있다. index 스캔을 하면, join 비용이 많이 줄어들기 때문이다.
---------------
그런데, 여기서 문득 A left join B와 B left join A의 차이가 궁금해졌다. 즉, 테이블의 위치에 따라 join의 성능이 달라지는지가 궁금해졌다. 왜냐하면, IBM의 문서에서도 outer table과 inner table에 대해서 명확히 구분하고 있기 때문이다. 즉, outer table에 먼저 접근하고 inner table에 대해 중첩 loop 로직이 들어가기 때문이다.
https://www.ibm.com/docs/en/db2-for-zos/11?topic=operations-nested-loop-join-method1
결론은, 상관없다이다. 왜냐하면, optimizer가 최적의 outer table과 inner table을 찾아서 선택하기 때문이다.
https://stackoverflow.com/questions/12177672/which-table-is-considered-inner-in-a-nested-loop-join
'딥상어동의 딥한 SQL > LV2.중급쿼리' 카테고리의 다른 글
[SQL] SubQuery가 가진 의의 (0) | 2021.06.27 |
---|---|
[SQL] 언어가 가진 철학 (0) | 2021.06.27 |
SQL 구문이 데이터 저장소에 이르기 까지 (0) | 2021.06.26 |
왜 버퍼를 사용하는가? (0) | 2021.06.26 |
[MSSQL] while (1) 기본 사용법 - declare, set, while, begin, end, print (0) | 2021.03.29 |
제 블로그에 와주셔서 감사합니다! 다들 오늘 하루도 좋은 일 있으시길~~
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!