최적화3 [Database] HASH JOIN 최적화 1. HASH JOIN 이란? HASH 조인은 조인될 두 테이블 중 하나를 해시 테이블로 선정하여 조인될 테이블의 조인 키 값을 해시 알고리즘으로 비교하여 매치되는 결과값을 얻는 방식이다. 동작 방식 1. 둘 중 작은 집합(Build Input)을 읽어 Hash Area에 해시 테이블을 생성한다. (해시 함수에서 리턴 받은 버킷 주소로 찾아가 해시 체인에 엔트리를 연결) - 작은 테이블에서 해시 테이블을 만드는 이유는 해시 테이블은 DBMS의 워킹 메모리에 저장되므로 조금이라도 작은 것이 효율적이기 때문이다. 2. 반대쪽 큰 집합(Probe Input)을 읽어 해시 테이블을 탐색하면서 JOIN 한다. 3. 해시 함수에서 리턴 받은 버킷 주소로 찾아가 해시 체인을 스캔하면서 데이터를 찾는다. 2. 특징 N.. 2021. 11. 14. [Database] SORT MERGE JOIN 최적화 1. SORT MERGE JOIN이란? Sort Merge는 결합 대상 테이블들을 각각 결합키로 정렬하고, 일치하는 결합키를 찾으면 결합한다. Nested Loop의 중첩 for문과 유사하다고도 볼 수 있음. 1. 각 테이블에 대해 동시에 독립적으로 데이터를 먼저 읽어 들인다. 2. 읽혀진 각 테이블의 데이터를 조인을 위한 연결고리에 대하여 정렬을 수행한다. 3. 정렬이 모두 끝난 후에 조인 작업이 수행한다. 2. SORT MERGE JOIN 특징 대상 테이블을 모두 정렬해야 하므로 메모리를 많이 소비. Hash는 한쪽 테이블에 대해서만 해시 테이블을 만들므로 Hash보다 많은 메모리를 사용한다. Hash와 다르게 부등호를 사용한 결합에도 사용할 수 있다. 단, 부정조건 결합에서는 사용할 수 없다. 테이.. 2021. 11. 14. [Database] Nested Loop 최적화 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의 대상 건수를 줄이는 이유는 "드라이빙 테이블의 추출 건수가 곧 드리븐 테이블의 액세스 반복 횟수가 되므로 건수가 더 적은 테이블이 드라이빙 테이블로 선정되어야 한.. 2021. 11. 14. 이전 1 다음