JOIN
쿼리 사용 / MongoDB : lookup
쿼리 사용🤔 MongoDB 사용시 lookup은 최대한 사용하지 말아야 한다??
- MongoDB는 조인 연산(lookup)에 대해 관계형 DB보다 성능이 떨어진다고 함.
→ 여러 벤치마크 테스트에서 알려짐
→ 여러 테이블을 조인하는 작업이 많은 경우 관계형 DB를 사용해야..
SELECT * FROM TableA A
INNER JOIN TableB B ON
A.key = B.key
SELECT * FROM TableA A
LEFT JOIN TableB B ON
A.key = B.key
SELECT * FROM TableA A
RIGHT JOIN TableB B ON
A.key = B.key
SELECT * FROM TableA A
FULL OUTER JOIN TableB B ON
A.key = B.key
위의 Join의 원리는 Join의 원리를 기반으로 조인을 하는 것이다.
EX) t1, t2 테이블을 조인한다 → t1 테이블에 행을 하나씩 읽고 t2 테이블에서 행을 하나씩 읽어 조건에 맞는 레코드를 찾아 결괏값을 반환
for each row in t1 matching reference key {
for each row in t2 matching reference key{
if row satisfies join conditions, send to client
}
}
<
, >
등 범위 비교 연산자가 있을 때 쓴다. MySQL8.0.18 release 이후 사용 가능
SELECT given_name, country_name
FROM persons JOIN countries
ON persons.country_id = countries.country_id;
위의 예제를 통해 이해해보자!
1. Build 단계
countries.country_id
가 키로 사용2. probe 단계
persons.country_id
의 값을 조회 키로 사용하여 행과 일치하는 해시 테이블을 조사함. 일치하는 행을 찾아서 결괏값으로 반환🤔 해시 조인 특징
- 각 테이블은 한 번씩만 읽게 되어 중첩해서 두 개의 테이블을 읽는 중첩 루프 조인보다 보통 성능이 더 좋음
- 참고) 사용 가능한 메모리양은 시스템 변수
join_buffer_size
에 의해 제어되며, 런타임 시 조정할 수 있음
면접을 위한 CS전공지식
SQL Joins Visualizer
MySQL8 해시조인(Hash Join)