교차곱은 두 릴레이션(테이블)의 튜플(행)을 모두 조합하여 새로운 튜플 집합을 만드는 연산이다. 릴레이션 R과 S가 있을 때, R의 각 튜플과 S의 각 튜플을 순서쌍으로 결합한다.
디그리는 릴레이션의 속성(컬럼) 개수를 의미한다. 교차곱의 디그리는 두 릴레이션의 디그리를 더한 값이다. 예를 들어, R에 3개의 속성, S에 4개의 속성이 있다면, R × S의 디그리는 7이다.
카디널리티는 릴레이션의 튜플(행) 개수를 의미한다. 교차곱의 카디널리티는 두 릴레이션의 카디널리티를 곱한 값이다. 예를 들어, R에 10개의 튜플, S에 5개의 튜플이 있다면, R × S의 카디널리티는 50이다.
교차곱(Cartesian Product)은 두 릴레이션(테이블)의 모든 튜플(행)을 조합하여 새로운 튜플 집합을 만드는 연산이다. 이를 수학적으로 정의하면 다음과 같다.
릴레이션 과 가 각각 튜플 집합으로 주어졌다고 가정하자:
여기서 와 는 각각 과 의 개별 튜플을 나타낸다.
교차곱 는 의 각 튜플 와 의 각 튜플 를 한 쌍으로 묶은 모든 가능한 순서쌍의 집합이다. 수학적으로 표현하면:
교차곱의 결과는 총 개의 튜플로 구성된다. 이는 의 튜플 수 과 의 튜플 수 을 곱한 값과 같다.
| 학번 | 이름 |
|---|---|
| 1 | 철수 |
| 2 | 영희 |
| 과목코드 | 과목명 |
|---|---|
| A101 | 수학 |
| B202 | 영어 |
| 학번 | 이름 | 과목코드 | 과목명 |
|---|---|---|---|
| 1 | 철수 | A101 | 수학 |
| 1 | 철수 | B202 | 영어 |
| 2 | 영희 | A101 | 수학 |
| 2 | 영희 | B202 | 영어 |
교차곱은 대부분의 조인 연산의 내부 구현 기반이다. 조인은 교차곱 후 조건 필터링(예: ON 절)을 통해 결과를 제한한다. 예를 들어:
SELECT *
FROM orders o
JOIN customers c ON o.customer_id = c.id;
이 쿼리는 내부적으로 교차곱을 수행한 후 ON 조건으로 필터링한다. 실행 계획(EXPLAIN)을 통해 교차곱 발생 여부를 확인하는 것이 중요하다.
A/B 테스트나 실험 조건 조합 생성 시 교차곱을 활용하여 모든 가능한 조합을 만든다. 예를 들어, 사용자 그룹과 실험 변수를 결합하여 테스트 케이스를 생성한다.
샘플 데이터로 모든 경우의 수를 검증할 때 교차곱을 사용한다. 이는 기능별 테스트 케이스 생성에 유용하다.
교차곱은 튜플 수가 급격히 증가하여 저장 공간, 네트워크, CPU 자원을 많이 소모한다. 예를 들어, 10만 건의 orders와 100개의 promotions를 교차곱하면 1천만 건의 결과가 생성된다. 이를 방지하려면 WHERE 절로 필터링하거나 데이터 축소 전략을 적용해야 한다.
하둡, 스파크 같은 분산 시스템에서 교차곱은 데이터 셔플로 인해 무거운 연산이다. 브로드캐스트 조인, 파티셔닝, 사전 필터링으로 셔플량을 최소화한다.
마케팅 데이터 파이프라인에서 주문별 가능한 프로모션 조합을 생성하는 쿼리는 다음과 같다:
SELECT o.order_id, p.promo_code
FROM orders o
CROSS JOIN promotions p
WHERE p.valid_for = o.order_type;
WHERE 절로 프로모션 적용 조건을 제한하여 튜플 폭발을 방지한다.
| 구분 | 설명 및 권장 전략 |
|---|---|
| 교차곱 사용 | 조인 구현의 기반이나, 직접 사용은 제한적으로 하며 조건 필터링과 함께 사용한다. |
| 튜플 폭발 주의 | 결과 튜플 수를 계산하고, WHERE 절로 필터링하여 자원 낭비를 방지한다. |
| 실행 계획 분석 | EXPLAIN 또는 쿼리 프로파일러로 교차곱 발생 여부를 확인한다. |
| 인덱스 활용 | 조인 키에 적절한 인덱스를 설계하여 필터링 성능을 높인다. |
| 분산 처리 최적화 | 분산 환경에서는 브로드캐스트 조인, 파티셔닝, 사전 필터링으로 데이터 셔플을 최소화한다. |