JOIN입문

CROSS JOIN

두 테이블의 모든 행을 모든 경우의 수로 조합하는 조인

정의

연결 조건 없이 두 테이블의 모든 행을 가능한 모든 조합으로 만든다. 결과 행 수는 A행수 × B행수가 된다. 카드 게임의 모든 카드 조합처럼, 한 쪽의 모든 행이 반대쪽의 모든 행과 짝지어진다. 의도적으로 쓰는 경우(달력 × 부서로 매트릭스 만들기)도 있지만, 대부분은 JOIN 조건을 빠뜨린 실수다.

왜 중요한가?

"JOIN 했는데 결과가 이상하게 많이 나온다"의 원인. 여러 테이블을 JOIN할 때 조인 조건 하나만 빠뜨려도 그 테이블이 모든 경우의 수로 곱해져서 결과가 폭증한다. 1만 × 1만 = 1억 행이 한순간에 만들어질 수 있다.

틀리기 쉬운 포인트

  • !ON 조건이 빠진 JOIN은 자동으로 CROSS JOIN이 됩니다. 옵티마이저는 경고하지 않습니다.
  • !의도된 CROSS JOIN은 명시적으로 CROSS JOIN 키워드를 쓰는 것이 가독성에 좋습니다.
  • !결과 행 수는 양쪽 행 수의 곱. 1만 × 1만 = 1억으로 폭증합니다.

예시

SELECT d.day, p.product_id
FROM days d
CROSS JOIN products p;

성능 포인트

!결과 행 수가 곱으로 늘어나므로 1만 × 1만 = 1억. 의도치 않은 CROSS JOIN은 즉시 OOM/Temp 폭증으로 이어진다.

관련 개념

관련 카테고리