-
join<프로그래머스 고득점 SQL Kit> 2023. 3. 28. 17:49728x90
inner join, outer join, left join, right join
nested loop join : 이중(or 중첩) for문
Nested loop join은 두 개의 테이블(크기가 작은 테이블 : outer table, 크기가 큰 테이블 : inner table) 중 하나를 기준으로 선택하고, 다른 테이블의 모든 행을 하나씩 가져와서 기준 테이블의 각 행과 비교합니다. 이렇게 비교하여 일치하는 결과가 나오면, 이를 결과 테이블에 추가합니다.이 방법은 간단하지만, 대용량 데이터 집합을 처리할 때는 성능 문제가 발생할 수 있습니다. 예를 들어, 기준 테이블이 매우 크고 다른 테이블도 큰 경우, 모든 조인 작업을 수행하는 데 많은 시간이 소요될 수 있습니다.
Table A: ID Name 1 Alice 2 Bob 3 Charlie Table B: ID Age 1 25 2 30 4 35 SELECT A.Name, B.Age FROM TableA A, TableB B WHERE A.ID = B.ID Result: Name Age Alice 25 Bob 30
sort merge join : join하는 컬럼을 기준으로 sorting + 이중 for문
inner table에 적절한 인덱스가 없어서 nested loop join을 쓰기에 애매할 때 사용
장점 : table random access가 발생하지 않음
* table random access란
Table random access는 데이터베이스에서 테이블의 임의의 레코드에 접근하는 것을 의미합니다. 이는 일반적으로 인덱스를 사용하지 않는 경우에 발생하며, 테이블의 모든 레코드를 차례대로 검색해야 하는 경우가 있습니다.
인덱스를 사용하지 않는 경우에는 모든 레코드를 검색해야 하므로, 검색 속도가 매우 느려질 수 있습니다. 따라서, 대용량의 테이블에서 랜덤 액세스가 빈번하게 발생하는 경우 성능이 저하될 수 있습니다.
랜덤 액세스를 최소화하기 위해서는 인덱스를 적절하게 사용하는 것이 중요합니다. 인덱스를 사용하면 레코드를 찾기 위해 전체 테이블을 검색하지 않고, 인덱스 키를 참조하여 빠르게 검색할 수 있습니다.
하지만, 인덱스를 사용할 수 없는 경우에는 랜덤 액세스를 최소화하기 위해 테이블을 적절하게 분할하거나, 미리 정렬된 상태로 유지하는 것이 도움이 될 수 있습니다. 또한, 쿼리를 최적화하여 조건절을 최소화하고, 필요한 컬럼만 조회하도록 하는 등의 방법으로 랜덤 액세스를 최소화할 수 있습니다.
*sorting(sort area < pga)은 pga 영역에서 일어나므로 경합이 발생하지 않아 성능에 유리하다
*pga란
PGA(Program Global Area)는 Oracle 데이터베이스에서 각 세션마다 할당되는 메모리 영역 중 하나입니다. 각 세션은 자신만의 PGA 내부 메모리 공간을 사용합니다. 이와는 달리, SGA(System Global Area)는 모든 세션이 공유하는 메모리 영역입니다.Sorting 작업이 PGA 영역에서 일어나면, 각 세션은 자신의 PGA 내부 메모리 공간에서 Sorting 작업을 수행합니다. 따라서, 각 세션의 Sorting 작업이 서로 독립적으로 실행되어 경합이 발생하지 않습니다. 이로 인해, Sorting 작업이 PGA 영역에서 수행될 때 SGA 영역에서 발생하는 경합 문제를 피할 수 있으며, 성능이 향상될 수 있습니다.
또한, Oracle은 대용량 Sorting 작업을 위해 다양한 기법을 제공합니다. 예를 들어, 분할 정복 알고리즘(Divide and Conquer Algorithm)을 사용하여 큰 Sorting 작업을 작은 단위의 Sorting 작업으로 분할할 수 있습니다. 이를 통해 PGA 영역에서 실행되는 Sorting 작업의 크기를 줄일 수 있습니다.
또한, Oracle은 Sorting 작업에 대한 다양한 최적화 기능을 제공합니다. 예를 들어, 블록 소팅(Block Sorting) 및 인메모리 소팅(In-Memory Sorting) 기능을 사용하여 Sorting 작업을 최적화할 수 있습니다. 블록 소팅은 디스크에서 데이터를 읽어들이고 Sorting 작업을 수행하는 반면, 인메모리 소팅은 PGA 영역에서 Sorting 작업을 수행합니다. 이러한 최적화 기능을 사용하면 Sorting 작업의 성능을 향상시킬 수 있습니다.
hash join :
outer table = 크기가 작은 테이블 : build input(=outer table) -> hast영역(<pga)에 올린다.(=저장)예를 들어, "Hello, World!"라는 문자열을 MD5 해시 함수에 입력하면 다음과 같은 128비트의 출력 값을 얻을 수 있습니다.
5eb63bbbe01eeed093cb22bb8f5acdc3
728x90'<프로그래머스 고득점 SQL Kit>' 카테고리의 다른 글
[SQL 프로그래머스 JOIN] 5월 식품들의 총매출 조회하기 (0) 2023.05.21 [SQL 프로그래머스 JOIN] 상품을 구매한 회원 비율 구하기 (ORCALE, MYSQL) (0) 2023.05.17 [SQL 프로그래머스 JOIN] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (ORCALE, MYSQL) (0) 2023.05.17 MySQL, Oracle 비교 (0) 2023.03.23 데이터베이스의 종류? (0) 2023.03.23