성능 이슈를 볼 때는 기능 이름보다 무엇을 끝까지 보존해야 하는지를 먼저 보면 됩니다. OUTER JOIN은 그 보존 규칙 때문에 읽는 양과 후속 처리 비용이 쉽게 커집니다.
초기에 제외하지 못하므로 보존 대상이 조인 이후 단계까지 계속 따라갑니다.
같은 의미를 유지해야 하므로 더 싼 실행 계획으로 바꾸기 어려운 경우가 많습니다.
남겨 둔 행을 끝까지 들고 가야 해서 I/O와 후속 연산 비용이 퍼집니다.
보존할 이유가 없다면 INNER JOIN으로 바꾸는 것이 가장 큰 비용 원인을 바로 제거합니다.
보존된 행에 붙일 대상을 빨리 찾게 해야 합니다. 조인 컬럼 인덱스가 느리면 OUTER JOIN 비용이 곧바로 커집니다.
OUTER JOIN은 결과가 넓어지기 쉬우므로 필요한 컬럼만 가져와 I/O, 정렬, 메모리 사용을 함께 줄입니다.
조건 위치가 어긋나면 보존해야 할 행을 뒤에서 다시 걸러 결과 의미도 바뀌고, 성능 문제처럼 보이는 왜곡도 생깁니다.
OUTER JOIN 필요성을 먼저 줄이고, 남겨야 한다면 탐색 비용과 결과 폭을 줄이며 조건 위치를 정확히 잡는 순서로 점검합니다.