실행계획 중에 잘 이해가 가지 않는 부분이 이렇게 문의드려봅니다.
의문이 가는 부분을 scott 계정의 emp, dept를 가지고 똑같이 재현해 보았습니다.
1번 쿼리
select /*+ use_nl(a,b) */ a.*, b.dname from scott.emp a, scott.dept b where a.deptno = b.deptno;
(실제로 사용하는 쿼리에서는 힌트를 주지 않아도 nl을 탑니다)
2번 쿼리
select a.*, (select dname from scott.dept b where a.deptno = b.deptno) dname from scott.emp a;
1번 쿼리에서는 nl 조인이 발생하는데 2번 쿼리에서는 실행계획에 조인이 명시되지 않았습니다.
그리고 consistent gets도 1번 쿼리에서는 23인데 비해 2번 쿼리에서는 12로 절반 가까이 낮습니다.
2번 실행계획에 대한 해석을 부탁드리며
1번 쿼리 대신 2번 쿼리 방식으로 쿼리를 짰을때 문제점은 없는지 여쭤봅니다.