느린 것을 걱정하지 말고, 멈춰서는 것을 걱정하라
article thumbnail

보통의 OLTP(Online Transaction Processing)성 프로세스의 경우, 소량의 데이터를 조회하여 데이터를 생성, 수정, 삭제하여 NL조인으로 충분하지만, 데이터가 많을 경우 소트머지 조인이나, 해시조인을 사용하라고 한다. 

 

소트머지 조인의 경우 조인하려는 양쪽의 테이블을 조인컬럼을 기준으로 정렬 후, 조인하는 방식이고

해시조인의 경우 데이터의 양이 적은 테이블을 기준(데이터 양이 큰 테이블을 기준으로 만들수 있지만 지양한다.)으로 해시테이블을 만든 후 조인테이블이 해시테이블과 일치하는지 확인하는 작업을 하면서 조인한다.

 

NL조인보다 위 두개 조인이 대용량 데이터 조인시 빠른 이유는 NL조인의 경우 인덱스에 기반한 랜덤액세스 방식의 조인이고, 모든 프로세스가 바라보고 있는, SGA영역에서 연산이 일어나서 래치 락등을 고려하게 된다. 

 

단, 소트머지 조인이나 해시조인의 경우 PGA영역에서 조인이 이루어지기 때문에, 래치락 등을 신경쓰지 않아도 되므로 속도가 더 빠르다고 볼 수 있다.

 

그렇다고, 무작정 해시조인이나 소트머지조인을 사용하면 안되는 이유는, NL조인의 경우 한번 인덱스를 만들어 놓으면 여러 쿼리에서 해당 인덱스를 재사용하여 쿼리를 수행하는 방식이지만, 해시조인이나 소트머지조인의 경우 단 한번의 쿼리수행을 위해 PGA상에서 자료구조를 만들고 연산을 하는등의 작업이 필요하여, CPU나 메모리의 사용량이 증가한다고 한다.

(큰 차이가 없다면 NL조인을 쓰는것이 리소스등을 고려했을때 유리하다는 것!) 

 

 

결론적으로는 아래의 flow대로 조인 메소드를 어떤것을 사용할지 정하면 되겠다.

profile

느린 것을 걱정하지 말고, 멈춰서는 것을 걱정하라

@주현태

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!