본문 바로가기

IT/Oracle

병합 조인(Cartesian Join) 비용 증가

반응형

병합 조인(Cartesian Join)의 비용이 증가할 때 이를 해결하기 위해 필요한 접근 방법은 다음과 같습니다. Cartesian Join은 일반적으로 조인 조건이 누락되거나 비효율적으로 작성된 쿼리로 인해 발생하며, 이를 해결하려면 다음과 같은 방법을 적용할 수 있습니다.

1. 조인 조건 확인
  • 병합 조인(Cartesian Join)은 조인 조건이 없을 때 모든 행을 서로 조합하므로 비용이 급증합니다.
  • 확인 방법 : SQL 쿼리에서 ON, USING, WHERE 절을 통해 적절한 조인 조건이 포함되어 있는지 확인합니다.
  • 수정 예제

-- 잘못된 예: 조인 조건 누락
SELECT * 
FROM employees, departments;

-- 수정된 예: 조인 조건 추가
SELECT * 
FROM employees e
JOIN departments d
ON e.department_id = d.department_id;


2. 카디널리티(cardinality) 감소
  • 두 테이블의 행 개수가 너무 많으면 Cartesian Join이 성능에 큰 영향을 미칩니다. 결과 집합을 제한하여 효율을 높입니다.
  • 필터 조건 추가

SELECT * 
FROM employees e
CROSS JOIN departments d
WHERE e.status = 'active' AND d.region = 'East';


3. 통계 정보 갱신
  • 옵티마이저는 테이블과 인덱스의 통계 정보를 기반으로 실행 계획을 수립합니다.
  • 통계 정보가 오래되었거나 잘못되었을 경우 부적절한. Cartesian Join이 발생할 수 있습니다.
  • 통계 갱신

BEGIN
    DBMS_STATS.GATHER_TABLE_STATS(ownname => 'SCHEMA_NAME', tabname => 'TABLE_NAME');
    DBMS_STATS.GATHER_INDEX_STATS(ownname => 'SCHEMA_NAME', indname => 'INDEX_NAME');
END;
/
반응형