NL조인과, HASH조인은 각각 어떤 상황에 적용하면 좋은지 궁금합니다. 0 3 2,268

by DB초보 [2014.03.10 11:30:49]


조인 세미나를 듣고 이제 실행 계획을 떠서 어떤 조인방식인지 살펴보고, 인덱스를 추가해야하는지 감이 오는데요

NL조인(드라이빙 테이블), HASH조인(빌드업 테이블) 첫 테이블이 데이터가 적을때 적용하면 좋다는것 까지는 알겠는데.
더 자세히 어떤 케이스별로 조인방식이 좋은지는 궁금해서 질문드립니다.

by drakula [2014.03.10 12:01:42]

안녕하세요~!!!

조인 세미나 듣고 많이 혼란 스러우셨죠???
저도 많이 힘들었습니다~!!! ㅋㅋㅋ


아무래도. 몰랐을때 그냥 썼지만, 알고 나면은 어려운거 같습니다.


이렇게 생각하시면은 될꺼 같습니다.

1. 두 테이블 중 작은 테이블을 선두로 한다. -->가장 기본
2. Driving에 의해서 추출되는 건수 만큼 Inner 테이블이 돌아야 하는 양이 많다고 하면은
    hash로 가는게 좋습니다.


by DarkBee [2014.03.10 12:15:28]
적합성으로만 따진다면

OLTP ( 계정계 ) : NL 조인위주
OLAP ( 정보계 ) : hash 조인위주


by 아발란체 [2014.03.10 14:14:37]

용량이 적다면 큰 차이가 없는데, 반대로 액세스 데이타가 많을 때
NL-JOIN은
선결 처리가 랜덤이고 최악의 경우 아직 메모리에 없고 디스크에 있으면...
선행 처리 루프가 랜덤 탈 때마다 한 개 블록에 데이타가 있다는 보장도 없고...
메모리에 가지고 와도 데이타가 많아 지정한 정렬 영역보다 커서
여기서 발생하는 부하는 급 상승 할 수 있고..
(이럴 경우 클래스터 팩터와 정렬 메모리 크기를 조정하면 되는데...  초대형은.. 이런 부분도 의미가 희석..)
해쉬는 이런 문제에 대해 보다 유연한 처리를 가지는 것 같습니다.
페어, 해쉬키를 써서 랜덤 인덱스 부하가 없고 대량을 처리해도 파티션 단위로 처리해서
대용량 처리 시 앞서 NL 정렬을 위한 크기보다 해쉬 영역 크기 지정 부담이(파티션) 적습니다.
최근 DBMS 옵티마이저는 해쉬로 처리하려는 경향이 보다 강해지고 있다고 합니다.
이 말만 보면 왜 NL-JOIN를 쓰지? 다 HASH 쓰지.. 하는데
다 HASH로 하면 관련 처리를 위해 메모리를 잡아먹기 때문에 이것저것 다 메모리를 쓰다 보면
시스템 전체에 부하를 줄 수가 있기 때문에 NL-JOIN로 충분히, 훌륭히 처리 할 수 있는 것들이 아니라면 검토해야 할 조인 방법이 아닌가 합니다.
아 또한 인덱스는 영구적인? 반면 해쉬 조인은 요청 할 때마다 해슁 처리를 하기 때문에
대용량이 아닌 빈번한 OLTP 같은 처리에서 효율이 떨어질 수 있습니다.
이론적으로는 내용을 좀 더 추가하면 위와 중복되지만..
해쉬는 랜덤 액세스 및 정렬 부하가 없기 때문에 대량 범위나 클러스터 팩터가 나쁠 때 유리하다고 합니다. 반대인 경우라면 그럼 NL-JOIN이 적절한 조인이 되겠네요.

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