오라클 nl 조인 0 2 717

by 앨리스 [Oracle 기초] [2019.05.24 19:19:50]


오라클 성능고도화2권을 읽다가 이해안가는부분이있어 질문드립니다.

조건절 이행 파트에서 조인조건은 이행되지 않는다는 예시의 쿼리입니다.

Select /*+ ordered use_nl(o) use_nl(d) ... */

from 고객 c, 주문 o, 주문상세 d

where d.고객번호 = c.고객번호 and d.고객번호 = o.고객번호

....

책에서 이 쿼리는 고객 -> 주문 -> 주문상세 순으로 nl 조인 되는데요

조인조건은 이행되지 않아서, 즉 c.고객번호 = o.고객번호 라는 조건이 없기 때문에 고객과 주문이 카티젼 조인이 이루어질거라 생각했는데 nl 조인이 되는것같더라고요..

Nl 조인이 조인 조건 없이도 가능한 조인 방식인가요?ㅠㅠ

 

by 마농 [2019.05.27 08:03:18]

명시적 힌트로 NL 조인을 하라고 했으니 하는 것입니다.
힌트 없다면? 이런 순서가 나오질 않죠. 비효율적이라서.
힌트로 만든 억지 실행계획입니다.


by 띠엉이 [2019.05.27 12:38:55]

/*+ ordered use_nl(c o d) */ 

의 의도인것 같습니다. 

고객 c, 주문 o, 주문상세 d

where c.고객번호=o.고객번호 and o.고객번호 = d.고객번호 

로 실행계획이 나올 수 있을것 같네요. 
옵티마이저에서 저렇게 해석할 것 같습니다. 

====================================

# 원본 

고객 c, 주문 o, 주문상세 d

where d.고객번호 = c.고객번호 and d.고객번호 = o.고객번호

 

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입