오라클을 사용하면서, 실행계획(Explain plan)을 돌리면 조인 수행 방식에 따라 cost가 들쭉날쭉한 것을 볼 수 있었다.
그 중, NESTED LOOP 라는 것이 가장 많이 눈에 띄었는데, 이를 정리해보고자 했다.
그 중, NESTED LOOP 라는 것이 가장 많이 눈에 띄었는데, 이를 정리해보고자 했다.
Nested Loop ( NL )
for ( int i = 0 ; i < rows; i ++ ) {
for ( int j = 0 ; j < columns; j++ ) {
// 데이터 처리
}
}
위키에선 다음과 같이 설명하고 있다.
수행속도 = 드라이빙 테이블의 튜플 수 * 후행 테이블의 자료 량 + 드라이빙 테이블의 자료 량BigO 표기법으로 표현 시, 수행속도는 O( |R| |S| )
( R: 드라이빙 테이블 튜플 수, S: 후행 테이블 튜플 수 )
- 수행에 가장 영향을 미치는 것은 '드라이빙 테이블의 튜플 수' 이다.
수행속도를 위해서는 드라이빙 테이블이 작을 수록 좋다고 한다. 후행 테이블의 크기 역시 상관이 있을 것이라 생각하지만, 위의 수행속도 식은 다음과 같이 표현되기도 한다.
수행속도 = 드라이빙 테이블의 튜플 수 * 후행 테이블 접근 횟수여기서, 후행 테이블 접근 횟수는 인덱스를 통해서 줄이는 방식으로 튜닝하는 것이 옳다고 한다.
댓글 없음:
댓글 쓰기