본문 바로가기
DBMS/데이터베이스

[데이터베이스] SQL JOIN + INDEX 개념

by 클레어몬트 2025. 2. 6.

평소에 SKALA 팀원분들과 얘기를 할 때 컴공식 유머를 발휘하는데, 여기서 JOIN문이 자주 쓰인다..ㅎ

 

 

INNER JOIN

 

JOIN : 두 개 이상의 테이블을 연결하여 데이터를 조회

데이터베이스는 일반적으로 정규화를 통해 여러 테이블로 분리되므로, 데이터를 효과적으로 활용하기 위해서는 JOIN을 사용하여 테이블 간의 관계를 결합해야 한다.

 

[대표적인 SQL JOIN의 5가지 종류]

1. INNER JOIN

두 테이블에서 공통된 값이 있는 행만 반환한다. 일치하지 않는 데이터는 결과에서 제외된다.

 

(사용 예제)

SELECT A.id, A.name, B.order_id
FROM Customers A
INNER JOIN Orders B ON A.id = B.customer_id;

 

2. LEFT JOIN (LEFT OUTER JOIN)

왼쪽 테이블의 모든 행을 반환하고, 오른쪽 테이블의 일치하는 데이터가 없으면 NULL을 반환한다.

 

(사용 예제)

SELECT A.id, A.name, B.order_id
FROM Customers A
LEFT JOIN Orders B ON A.id = B.customer_id;

 

3. RIGHT JOIN (RIGHT OUTER JOIN)

오른쪽 테이블의 모든 행을 반환하고, 왼쪽 테이블의 일치하는 데이터가 없으면 NULL을 반환한다.

 

(사용 예제)

SELECT A.id, A.name, B.order_id
FROM Customers A
RIGHT JOIN Orders B ON A.id = B.customer_id;

 

4. FULL OUTER JOIN

두 테이블의 모든 행을 반환하며, 일치하는 데이터가 없으면 NULL을 포함한다.

(일부 데이터베이스에서는 FULL OUTER JOIN을 지원하지 않을 수 있다)

 

(사용 예제)

SELECT A.id, A.name, B.order_id
FROM Customers A
FULL OUTER JOIN Orders B ON A.id = B.customer_id;

 

5. CROSS JOIN

두 테이블의 모든 행의 조합(카테시안 곱)을 반환한다.

ON 조건이 없으며, 두 테이블 간의 모든 가능한 조합이 생성된다.

 

(사용 예제)

SELECT A.name, B.product_name
FROM Customers A
CROSS JOIN Products B;

 

 

 

[JOIN 유형 및 성능 최적화 요약]

*FULL OUTTER JOIN 미지원 DB: MySQL, MariaDB, SQLite

 

 

 

[JOIN 최적화 전략]

1. 인덱스(Index) 이용: 조인 조건에 사용되는 컬럼에 인덱스를 설정하면 성능이 향상된다

책에서 인덱스를 이용해 바로 찾듯이, FULL SCAN을 할 필요가 없다!

 

보통 대부분의 DBMS에서 인덱스는 비-트리(B-tree) 구조를 가지고 있고, 내부적으로 이진 탐색 느낌을 하므로 O(log N) 의 시간 복잡도를 가진다! 한 마디로 엄청~ 빠르다

JOIN 쿼리에서 인덱스를 어떻게 쓰느냐에 따라 성능이 수십~수천 배 차이 날 수 있다

 

인덱스의 장점

✅ 조회 성능 향상 Full Scan 없이 특정 레코드 탐색 가능
✅ 정렬 없이 ORDER BY 최적화 인덱스가 정렬되어 있어 별도 SORT 불필요
✅ 범위 검색에 강함 BETWEEN, LIKE 'abc%' 조건 처리에 효율적
✅ JOIN 시 상대 테이블 탐색 속도 향상 Nested Loops 방식에서 매우 중요
✅ 중복 방지 (UNIQUE 제약조건) 유일성 보장도 인덱스로 처리
✅ GROUP BY, DISTINCT 최적화 인덱스 정렬 순서를 그대로 사용 가능

 

실전 팁

  1. JOIN 대상 컬럼에는 반드시 인덱스를 생성하자
  2. 자주 함께 쓰는 컬럼은 '결합 인덱스'로 관리하자
  3. 읽기 위주 시스템에서 인덱스는 필수!

 

2. 필요한 컬럼만 조회: SELECT * 대신 특정 컬럼을 지정하여 불필요한 데이터 로드를 줄인다

 

 

3. 적절한 조인 방식 선택: 데이터 구조와 조회 목적에 맞는 JOIN을 선택하면 성능을 최적화할 수 있다

 

 

 

SQL JOIN은 RDB에서 여러 테이블을 결합하여 유용한 데이터를 추출하는 중요한 기능이다. 각 JOIN의 특성을 이해하고, 데이터의 구조와 조회 목적에 맞게 적절한 조인을 선택하는 것이 중요하다. 이를 통해 데이터의 활용도를 높이고 효율적인 쿼리 성능을 유지할 수 있다!

 

 

 

 

 

 

INDEX 개념 부분 참고 및 출처: My Soulmate 연준님 velog https://velog.io/@bul0323/%EC%98%A8%EB%9D%BC%EC%9D%B8-%EC%87%BC%ED%95%91%EB%AA%B0-SQL-%ED%8A%9C%EB%8B%9D

연준님 감사합니다 ㅎ.ㅎ