더북(TheBook)

쿼리를 수행할 때는 일반적으로 세 가지 조인 알고리즘(중첩 루프, 해시 조인, 소트머지 조인)을 사용하는데, 이들은 한 번에 두 테이블만 접근한다는 점에서 비슷하다. SQL이 더 많은 테이블을 조인하는 경우 더욱더 많은 단계가 필요하다. 먼저 두 테이블을 조인해 중간 결과 집합을 만든 후 이 결과 집합과 다음 테이블을 조인하는 식으로 처리한다.

중첩 루프(Nested Loop) 조인은 가장 기본적인 조인 알고리즘이다. 쿼리 두 개가 중첩되어 있다고 생각하면 쉽다. 선행(Outer)(드라이빙) 쿼리가 한 테이블에서 결과 집합을 가져오고, 두 번째 쿼리는 선행 쿼리 결과 집합의 각 로우에 대응하는 데이터를 다른 테이블에서 가져온다. 따라서 중첩 루프 조인은 조인 조건에 참여하는 컬럼을 인덱스로 만들었을 때 가장 효과가 좋다. 드라이빙 쿼리가 작은 결과 집합을 반환할 때 중첩 루프 조인은 좋은 성능을 보인다. 그렇지 않으면 옵티마이저는 다른 조인 알고리즘을 선택한다.

해시(Hash) 조인은 조인에 참여하는 한쪽 테이블 데이터를 해시 테이블로 만든 후 다른 쪽 테이블의 각 로우를 매우 빠르게 탐색할 수 있다. 해시 조인을 튜닝할 때는 중첩 루프 조인과는 완전히 다른 인덱스 접근 방법이 필요하다. 해시 조인은 해시 테이블을 사용하므로 조인되는 컬럼을 인덱스로 만들 필요가 없다. 해시 조인의 성능을 향상할 수 있는 유일 인덱스는 WHERE 조건절 또는 조인할 때 ON 절에 사용되는 컬럼에 대한 인덱스다. 실제로 해시 조인은 이 두 가지 경우에만 인덱스를 사용한다. 현실적으로 해시 조인의 성능은 수평적(좀 더 적은 로우) 또는 수직적(좀 더 적은 컬럼)으로 해시 테이블의 크기를 줄여서 향상할 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.