Duplicate Weedout 은 세미 조인 서브 쿼리를 일반적인 INNER JOIN 쿼리로 바꿔서 실행하고 마지막에 중복된 레코드를 제거하는 방법으로 처리되는 최적화 알고리즘이다.
아래의 salaries 테이블의 Parimary key 가 (emp_no + from_date) 로 설정되어 있을경우 조회 결과는 중복된 emp_no 가 발생할 수 있다.
SELECT * FROM employee e
WHERE e.emp_no IN (SELECT s.emp_no FROM salaries s WHERE s.salary > 150000)
하지만, 아래의 쿼리엔 GROUP BY 절을 넣어주었는데 결과는 위의 세미 조인 서브쿼리와 동일한 결과를 얻었다.
SELECT e.* FROM employees.employees e , employees.salaries s
WHERE e.emp_no = s.emp_no AND s.salary > 150000
GROUP BY e.emp_no ;
실제로 Duplicate Weedout 최적화 알고리즘은 원본 쿼리를 위와 같이 INNER JOIN + GROUP BY 절로 바꿔서 실행하는 것과 동일한 작업으로 쿼리를 처리한다.
Weedout 최적화 알고리즘 처리과정은 다음과 같다.
Weedout 최적화 알고리즘은 다음과 같은 제한사항이 있다.