인터뷰 대비 DBMS 정리(2)

seulg1004·2024년 4월 5일
0

RDBMS 뽀개기

목록 보기
4/5

조인이란?, 조인의 종류

Join은 두 개 이상 테이블을 묶어 하나의 결과물을 만드는 것을 의미합니다.
MySQL에서는 Join으로, MongoDB(NoSQL)에서는 lookup으로 표현합니다. 하지만 NoSQL에서는 Join을 하게 되면 성능이 떨어지므로 여러 Join이 필요할 경우에는 관계형 데이터베이스를 사용해야 합니다.

조인의 종류는 내부 조인, 왼쪽 조인, 오른쪽 조인, 합집합 조인 이 있습니다.

위와 같이 ANSI 조인 방식을 사용할 수 있지만, WHERE절과 (+)를 사용해 Join하는 Oracle 조인 방식이 과거 코드에서 많이 사용됩니다.
▷ Oracle 조인 방식은 FULL OUTER JOIN을 표현할 수 없습니다.

조인의 동작 방식, 원리

조인이 동작하는 방식은 크게 세가지가 있다.

  1. 중첩 루프 조인(Nested Loop Join)
    : 중첩 For 문과 같은 원리로, 모든 행에 대해서 조인 테이블과 비교하여 조인하는 방식
    첫번째 테이블에서 행을 한번에 하나씩 읽고, 조인 테이블에서도 행을 하나씩 읽어 조건에 맞는 레코드를 찾아 결과값 반환
    -> 모든 Join에서 사용 가능
    -> 수행 속도 = 선행 테이블 사이즈 * 후행 테이블 접근 횟수

  2. 정렬 병합 조인(Sort Merge Join)
    : 양쪽 테이블을 정렬하여 차례대로 스캔하면서 연결고리의 조건으로 조인하는 방식
    조인할 경우 쓸 적절한 인덱스가 없고, 대용량의 테이블을 조인할 경우 사용합니다.
    -> EQUAL Join, Natual Join에서만 사용 가능
    -> 조인 조건으로 <, > 등 비교연산이 있을 때 사용 ('='은 중첩 루프 조인이 더 유리할 수 있음)
    -> 정렬을 하기 위한 영역에 따라 효율에 차이 발생

  3. 해시 조인(Hash Join)
    : 해시 테이블을 기반으로 조인하는 방식
    Hash 테이블을 생성 후 Nested Loop 처럼 순차적인 형태로 수행, Hash 테이블의 키는 조인에 사용되는 필드
    -> EQUAL Join, Natual Join에서만 사용 가능
    -> 연결 조건 연산자가 '=' 일 경우 사용
    -> 비용이 많이 발생하지만, 대용량 데이터 조인 시 중첩 루프 조인이나 정렬 병합 조인 보다 효율 ↑

조인 동작 방식을 컨트롤 할 수 있는지?

Driving 테이블과 Driven 테이블을 옵티마이저가 테이블의 크기에 따라 스스로 설정하는 경우가 있는데 STRAIGHT_JOIN 을 사용하면 Driving 테이블을 변경할 수 있습니다.

SELECT STRAIGHT_JOIN BOARD.TITLE, BOARD.DETAIL, CATEGORY.NAME
FROM BOARD, CATEGORY
WHERE BOARD.CATE_CODE = CATEGORY.ID
AND BOARD.REG_DTTM >= '2020.01.01'

위의 코드에서는 STRAIGHT_JOIN을 사용하여 BOARD 테이블을 Driving 테이블로 만들었습니다.

DB Locking 에 대해?

DB Lock은 DBMS에서 데이터의 동시성, 일관성을 잃지 않기 위해 사용하는 메커니즘으로, 트랜잭션의 원자성이 깨지지 않도록 방어하는 역할을 합니다.

  • 공유 락 Shared Lock(=Read Lock)
    : 데이터를 읽을 때 주어지는 Lock으로, 동시에 읽어도 데이터 일관성에 이슈가 발생하지 않기 때문에 모두 Shared Lock을 가질 수 있습니다.
  • 베타 락 Exclusive Lock(=Write Lock)
    : 데이터의 쓰기 명령에 주어지는 Lock으로, 다른 세션이 해당 자원에 접근하는 것을 막습니다. 트랜잭션 커밋 이전까지 유지됩니다.

데이터베이스 Schema란?

Schema는 데이터베이스의 구조와 제약 조건에 관한 전반적인 명세를 기술한 메타데이터의 집합입니다.
사용자의 관점에 따라 외부 스키마, 개념 스키마, 내부 스키마 로 나뉩니다.

0개의 댓글

관련 채용 정보