본문 바로가기
Database

[Database] Nested Loop 최적화

by byeongoo 2021. 11. 14.

1. Driving Table 모수 고려

Nested Loop 최적화를 할 때 "Driving Table(Outer Table)을 대상건수가 적은 테이블로 선정하라는 원칙"을 지키고 조인을 하였는데 하나 의문점이 생겼다.

 

Driving table이 100건이고 Driven-to table(Inner Table)이 1000건일 경우 조인 횟수는 100 X 1000이고, 반대의 경우에도 어차피 1000 X 100으로 똑같지 않나라는 의문이 들었다. 하지만 이거는 INDEX가 없을 때나 해당된다.

다른 블로그 글을 찾아보니 Driving Table의 대상 건수를 줄이는 이유는

"드라이빙 테이블의 추출 건수가 곧 드리븐 테이블의 액세스 반복 횟수가 되므로 건수가 더 적은 테이블이 드라이빙 테이블로 선정되어야 한다." 라고 설명이 되어 있었다.

 

아래 그림과 같이 고객 테이블에 10만명의 고객이 존재하고, 납입 방법 테이블에 납입방법코드로 인덱스가 존재한다고 생각해보자.

이때 고객테이블에는 10만명의 고객이 존재하기 때문에 10만번의 access가 일어난다. 그리고 각 고객은 납입방법코드 인덱스에 한번씩 접근하여 납입 방법 테이블과 조인하기 때문에 납입 방법 코드 인덱스에 10만번 접근하여 납입방법 테이블과 조인한다.

즉, 20만번의 엑세스가 일어난다.

 

만약 Driving Table을 납입 방법 코드로 하고 Driven-to Table을 고객 테이블로 한다고 생각해보자

우선 납입 방법 테이블에는 ROW가 3개이기 때문에 3번의 access가 일어나고, 고객 테이블에 존재하는 납입 방법 코드 인덱스에 접근하여 고객 테이블과 조인할 것 이다. 여기서 납입 방법 코드 인덱스는 납입 방법에 따라서 고객들이 정렬되어 있을 것 이다.

 

따라서 납입 방법 엑세스 3번 + 납입방법코드 인덱스를 통한 고객 테이블 조인 10만을 더해서 10만 3번의 엑세스가 일어난다.

 

2. Driving Table과 Driven-to Table 인덱스 선택

조인을 할 때 Driving Table에 걸리는 조건이 있을 것이다. 이 떄 Driving Table의 인덱스는 where절에 걸린 조건 기준으로 인덱스를 설정해준다.

 

그리고 Driven-to Table에는 조인 조건에 해당하는 컬럼들을 가진 인덱스를 세팅해줘야한다.

 

 

3. Nested Loop 방식 특징 및 주의 사항

3.1 특징

1. 주로 좁은 범위에 유리

2. 순차적으로 처리하며, Random Access 위주

3. 후행(Driven) 테이블에는 조인을 위한 인덱스가 생성되어 있어야 한다.

4. 실행속도= 선행 테이블 사이즈 * 후행 테이블 접근 횟수

 

3.2 주의 사항

1. 데이터를 랜덤으로 액세스하기 때문에 결과 집합이 많으면 수행속도가 저하됨

2. 선행(Driveing) 테이블의 크기가 작거나, Where절 조건을 통해 결과 집합을 제한할 수 있어야 한다.

3. 조인 연결고리 인덱스가 없거나, 조인 집합을 구성하는 검색 조건이 조인 범위를 줄여주지 못할 경우 비효율적이다.

 

REFERENCE

https://sparkdia.tistory.com/18

 

테이블 조인 방식(Table join method)

테이블 조인 방식은 테이블의 각 로우를 매핑 시 어떤 메커니즘을 사용하느냐에 따라 조인을 구분하는 겁니다. 데이터 셋의 건수 등을 기반으로 옵티마이져가 적합한 조인 메커니즘을 선택하

sparkdia.tistory.com

https://livedata.tistory.com/29

 

(데이터베이스) Nested,Hash 조인에 대해서

조인(join)  두 릴레이션간 관련된 투플들을 결합하여 하나의 투플로 만드는 연결방법으로써, 두 개 이상의 릴레이션을 갖는 관계 데이터 베이스에 대해서 릴레이션들 간의 관계를 처리할 수 있

livedata.tistory.com

https://mangkyu.tistory.com/96

 

[Database] 인덱스(index)란?

1. 인덱스(Index)란? [ 인덱스(index)란? ] 인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 만약 우리가 책에서 원하는

mangkyu.tistory.com

 

'Database' 카테고리의 다른 글

[Database] HASH JOIN 최적화  (0) 2021.11.14
[Database] SORT MERGE JOIN 최적화  (0) 2021.11.14
[Database] 데이터베이스 I/O 원리 및 최적화  (0) 2021.11.14
[Database] 정규화 정리  (0) 2021.10.24
Statement와 PreparedStatement  (0) 2021.10.17