728x90
Hash Join을 설명하기 위해 emp와 dept 테이블을 사용하여 실행 계획을 보여드리겠습니다. 예를 들어, emp 테이블은 사원 정보를 담고 있고, dept 테이블은 부서 정보를 담고 있다고 가정해봅시다.
EMP 테이블 구조:
emp_id | emp_name | dept_id | salary
-----------------------------------
1 | Alice | 101 | 50000
2 | Bob | 102 | 60000
3 | Carol | 101 | 55000
4 | David | 103 | 45000
5 | Eve | 102 | 52000
DEPT 테이블 구조:
dept_id | dept_name
-------------------
101 | HR
102 | Finance
103 | IT
이제 EMP와 DEPT 테이블을 Nested Loop Join을 사용하여 조인해보겠습니다.
쿼리:
SELECT emp.emp_name, dept.dept_name
FROM emp
JOIN dept ON emp.dept_id = dept.dept_id;
실행계획:
------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%)|
------------------------------------------------------------
| 0 | SELECT STATEMENT | | 5 | 105 | 5 |
| 1 | HASH JOIN | | 5 | 105 | 5 |
| 2 | TABLE ACCESS FULL| EMP | 5 | 75 | 2 |
| 3 | TABLE ACCESS FULL| DEPT | 3 | 21 | 2 |
------------------------------------------------------------
실행 계획 해석:
- HASH JOIN을 사용하여 조인이 수행됩니다.
- 먼저 EMP 테이블과 DEPT 테이블의 전체 행을 스캔하기 위해 각각 TABLE ACCESS FULL을 사용합니다.
- 그런 다음, 두 테이블의 조인 조건에 해당하는 열을 해시 함수를 사용하여 해시 테이블을 만듭니다.
- 최종적으로 해시 테이블을 사용하여 조인 결과를 생성합니다.
동작 방식:
- Hash Join은 두 테이블을 각각 전체 스캔하여 해시 테이블을 만들고, 해시 테이블을 사용하여 조인을 수행합니다.
- 해시 테이블을 사용하여 두 테이블의 조인 조건에 해당하는 데이터를 빠르게 찾을 수 있기 때문에 성능이 우수합니다.
Hash Join은 큰 테이블과 작은 테이블 사이에서 조인을 수행할 때 성능이 뛰어나며, 두 테이블의 크기가 비슷할 때도 효율적입니다. 이 예시에서는 dept 테이블이 작은 테이블이므로 dept 테이블을 드라이빙 테이블로 선택하여 Hash Join을 수행합니다. 이렇게 함으로써 두 테이블의 데이터를 빠르게 조합하여 조인 결과를 생성할 수 있습니다.
"드라이빙 테이블"은 여러 개의 테이블을 조인할 때, 조인을 시작하는 기준이 되는 테이블을 가리키는 용어입니다.
💡 Tip!
일반적으로 Hash Join은 인덱스를 타지 않고 전체 테이블을 스캔하는 것이 성능상 유리할 수 있습니다.
Hash Join은 큰 테이블과 작은 테이블 사이에서 조인을 수행할 때 효과적인 알고리즘입니다. 작은 테이블을 해시 테이블로 만들고, 큰 테이블의 각 행을 해시 함수를 사용하여 해시 테이블에서 조인할 데이터를 검색하는 방식으로 동작합니다.
인덱스를 타는 경우에는 인덱스 블록을 읽고, 해당 블록에 대응하는 데이터 블록을 찾아서 데이터를 가져오는 추가적인 I/O 작업이 발생합니다. 이러한 인덱스 탐색 작업은 비용이 크기 때문에 큰 테이블에 대해 수행하는 경우에는 인덱스를 타는 것보다 전체 테이블을 스캔하는 것이 더 빠를 수 있습니다.
또한 Hash Join은 두 테이블 간에 해시 함수를 사용하여 조인 조건에 해당하는 데이터를 매우 빠르게 찾을 수 있기 때문에 인덱스를 타지 않아도 효율적으로 조인을 수행할 수 있습니다.
하지만 데이터의 분포나 인덱스 상태에 따라서 성능이 달라질 수 있으므로, 어떤 경우에는 인덱스를 사용하는 것이 유리할 수도 있습니다. 따라서 데이터베이스 옵티마이저가 최적의 실행 계획을 선택하도록 하거나, 필요에 따라 테스트하여 성능을 비교하는 것이 중요합니다. 데이터베이스 시스템은 각 쿼리에 대해 다양한 실행 계획을 고려하여 최적의 조인 방법을 선택하므로, 개발자나 DBA는 인덱스를 생성하는 등의 성능 튜닝을 신중하게 수행해야 합니다.
목차
반응형
'코딩 > 오라클 튜닝' 카테고리의 다른 글
조인 알고리즘 힌트 사용 방법: Nested Loop Join, Hash Join (0) | 2023.07.27 |
---|---|
조인 알고리즘 선택 기준: Nested Loop Join, Hash Join (0) | 2023.07.27 |
Nested Loop Join 예시 (0) | 2023.07.27 |
관계형 데이터베이스(RDBMS) 조인 알고리즘 비유로 설명: Nested Loop Join, Hash Join, Sort Merge Join (0) | 2023.07.26 |
관계형 데이터베이스(RDBMS) 조인 알고리즘 종류: Nested Loop Join, Hash Join, Sort Merge Join (0) | 2023.07.26 |
댓글