nu_s

[SQL] 튜닝 - NL 조인🔥 본문

Data Base/DB Tunning

[SQL] 튜닝 - NL 조인🔥

woochii 2023. 8. 18. 10:54
728x90
반응형

NL 조인 (Nested Loop) - 중첩루프

 

NL 조인의 특징

  1. 가장 기본적인 조인이다.
  2. 인덱스를 사용한다. (소량에 유리)
  3. 한 레코드씩 순차적으로 읽는다.

 

기본 메커니즘

select e.사원명, c.고객명, c.전화번호
from 사원 e, 고객 c
where e.입사일자 >= '19960101'
and c.관리사원 번호 = e.사원번호
;

NL 조인 실행계획

Execution Plan
-------------------------------------------------------
0      SELECT STATEMENT Optimizer=ALL_ROWS
1   0   NESTED LOOPS
2   1    TABLE ACCESS (BY INDEX ROWID) OF '사원' (TABLE)
3   2     INDEX (RANGE SCAN) OF '사원_X1' (INDEX)
4   3    TABLE ACCESS (BY INDEX ROWID) OF '고객' (TABLE)
5   4     INDEX (RANGE SCAN) OF '고객_X1' (INDEX)

 

NL 조인을 사용할 때는 use_nl 힌트를 사용한다.

select /*+ ordered use_nl(c) */
      e.사원명, c.고객명, c.전화번호
from  사원 e, 고객 c
where e.입사일자 >= '19960101'
and   c.관리사원번호 = e.사원번호
;

 

3개 이상의 테이블을 조인할 때

/* A -> B -> C -> D 순으로 조회 */
select /*+ ordered use_nl(B) use_nl(C) use_hash(D) */ *
from A, B, C, D
where ...
;

leading 힌트

/* leading 힌트를 사용하면 원본을 바꾸지 않고 순서를 제어할 수 있다. */
select /*+ leading(C, A, D, B) use_nl(A) use_nl(D) use_hasg(B) */ *
from A, B, C, D
where ...
;

 

 

NL조인은 소량 데이터를 주로 처리하거나 부분범위 처리가 가능한 온라인 트랜잭션 처리(OLTP)에 적합한 조인 방식이다.

 

 

* NL 조인 재구성

아래 코드에서 잘못된 곳은?

select *
from   PRA_HST_STC a, ODM_TRMS b
where  a.SALE_ORG_ID = :sale_ord_id
and    a.STRD_GRP_ID = b.STRD_GRP_ID
and    a.STRD_ID     = b.STRD_ID
order by a.STC_DT desc
;

Inner 테이블 alias를 왼쪽에 기술하는 것이 중요

select *
from   PRA_HST_STC a, ODM_TRMS b      /* a가 outer 테이블, b가 inner 테이블 */
where  a.SALE_ORD_ID = :sale_org_id
and    b.STRD_GRP_ID = a.STRD_GRP_ID  /* inner테이블 alias를 왼쪽에 기술!!! */
and    b.STRD_ID     = a.STRD_ID
order by a.STC_DT desc
;
728x90
반응형