[SQL] Cartesian Product 란?

Hyunjun Kim·2025년 8월 9일
0

SQL

목록 보기
74/90

교차곱(Cartesian Product)이란?

교차곱은 두 릴레이션(테이블)의 튜플(행)을 모두 조합하여 새로운 튜플 집합을 만드는 연산이다. 릴레이션 R과 S가 있을 때, R의 각 튜플과 S의 각 튜플을 순서쌍으로 결합한다.

1. 교차곱의 디그리(Degree)

디그리는 릴레이션의 속성(컬럼) 개수를 의미한다. 교차곱의 디그리는 두 릴레이션의 디그리를 더한 값이다. 예를 들어, R에 3개의 속성, S에 4개의 속성이 있다면, R × S의 디그리는 7이다.


2. 교차곱의 카디널리티(Cardinality)

카디널리티는 릴레이션의 튜플(행) 개수를 의미한다. 교차곱의 카디널리티는 두 릴레이션의 카디널리티를 곱한 값이다. 예를 들어, R에 10개의 튜플, S에 5개의 튜플이 있다면, R × S의 카디널리티는 50이다.


3. 교차곱의 수학적 정의

교차곱(Cartesian Product)은 두 릴레이션(테이블)의 모든 튜플(행)을 조합하여 새로운 튜플 집합을 만드는 연산이다. 이를 수학적으로 정의하면 다음과 같다.

정의

릴레이션 RRSS가 각각 튜플 집합으로 주어졌다고 가정하자:

  • R={r1,r2,,rm}R = \{r_1, r_2, \ldots, r_m\}
  • S={s1,s2,,sn}S = \{s_1, s_2, \ldots, s_n\}

여기서 rir_isjs_j는 각각 RRSS의 개별 튜플을 나타낸다.

교차곱 R×SR \times SRR의 각 튜플 rir_iSS의 각 튜플 sjs_j를 한 쌍으로 묶은 모든 가능한 순서쌍의 집합이다. 수학적으로 표현하면:

R×S={(ri,sj)riR,sjS,1im,1jn}R \times S = \{(r_i, s_j) \mid r_i \in R, s_j \in S, 1 \leq i \leq m, 1 \leq j \leq n\}

설명

  • RR의 첫 번째 튜플 r1r_1SS의 모든 튜플 s1,s2,,sns_1, s_2, \ldots, s_n과 결합하여 다음 순서쌍을 생성한다:
    • (r1,s1),(r1,s2),,(r1,sn)(r_1, s_1), (r_1, s_2), \ldots, (r_1, s_n)
  • RR의 두 번째 튜플 r2r_2SS의 모든 튜플과 결합하여 다음 순서쌍을 만든다:
    • (r2,s1),(r2,s2),,(r2,sn)(r_2, s_1), (r_2, s_2), \ldots, (r_2, s_n)

결과

교차곱의 결과는 총 mnm \cdot n개의 튜플로 구성된다. 이는 RR의 튜플 수 mmSS의 튜플 수 nn을 곱한 값과 같다.


4. 예시

릴레이션 R (학생)

학번이름
1철수
2영희

릴레이션 S (과목)

과목코드과목명
A101수학
B202영어

교차곱 ( R \times S )

학번이름과목코드과목명
1철수A101수학
1철수B202영어
2영희A101수학
2영희B202영어

5. 교차곱 활용

조인 연산의 기반

교차곱은 대부분의 조인 연산의 내부 구현 기반이다. 조인은 교차곱 후 조건 필터링(예: ON 절)을 통해 결과를 제한한다. 예를 들어:

SELECT *
FROM orders o
JOIN customers c ON o.customer_id = c.id;

이 쿼리는 내부적으로 교차곱을 수행한 후 ON 조건으로 필터링한다. 실행 계획(EXPLAIN)을 통해 교차곱 발생 여부를 확인하는 것이 중요하다.

데이터 결합 파이프라인

A/B 테스트나 실험 조건 조합 생성 시 교차곱을 활용하여 모든 가능한 조합을 만든다. 예를 들어, 사용자 그룹과 실험 변수를 결합하여 테스트 케이스를 생성한다.

테스트 및 검증

샘플 데이터로 모든 경우의 수를 검증할 때 교차곱을 사용한다. 이는 기능별 테스트 케이스 생성에 유용하다.


6. 주의사항 및 최적화 전략

튜플 폭발 문제

교차곱은 튜플 수가 급격히 증가하여 저장 공간, 네트워크, CPU 자원을 많이 소모한다. 예를 들어, 10만 건의 orders와 100개의 promotions를 교차곱하면 1천만 건의 결과가 생성된다. 이를 방지하려면 WHERE 절로 필터링하거나 데이터 축소 전략을 적용해야 한다.

조인 순서와 인덱스 활용

  • 조인 순서 최적화로 불필요한 교차곱 연산을 줄인다.
  • 조인 키에 적절한 인덱스를 설계하여 필터링 성능을 높인다.

분산 처리 환경

하둡, 스파크 같은 분산 시스템에서 교차곱은 데이터 셔플로 인해 무거운 연산이다. 브로드캐스트 조인, 파티셔닝, 사전 필터링으로 셔플량을 최소화한다.


7. 실무 예시: 주문과 프로모션 조합

마케팅 데이터 파이프라인에서 주문별 가능한 프로모션 조합을 생성하는 쿼리는 다음과 같다:

SELECT o.order_id, p.promo_code
FROM orders o
CROSS JOIN promotions p
WHERE p.valid_for = o.order_type;

WHERE 절로 프로모션 적용 조건을 제한하여 튜플 폭발을 방지한다.


8. 결론 및 권장 전략

구분설명 및 권장 전략
교차곱 사용조인 구현의 기반이나, 직접 사용은 제한적으로 하며 조건 필터링과 함께 사용한다.
튜플 폭발 주의결과 튜플 수를 계산하고, WHERE 절로 필터링하여 자원 낭비를 방지한다.
실행 계획 분석EXPLAIN 또는 쿼리 프로파일러로 교차곱 발생 여부를 확인한다.
인덱스 활용조인 키에 적절한 인덱스를 설계하여 필터링 성능을 높인다.
분산 처리 최적화분산 환경에서는 브로드캐스트 조인, 파티셔닝, 사전 필터링으로 데이터 셔플을 최소화한다.
profile
Data Analytics Engineer 가 되

0개의 댓글