부서 관리자의 사원번호, 이름, 성, 부서번호 데이터를 중복 제거하여 조회하는 쿼리가 있다고 가정하자.
SELECT DISTINCT 사원.사원번호, 사원.이름, 사원.성, 부서관리자.부서번호
FROM 사원
JOIN 부서관리자
ON (사원.사원번호 = 부서관리자.사원번호)
;
튜닝 전 실행 계획은 다음과 같다.
부서관리자
테이블의 type
항목이 index
이므로, 인덱스 풀 스캔 방식으로 수행된다.사원
테이블의 type
항목이 eq_ref
이므로, 사원번호라는 Primary Key를 사용해 단 1건의 데이터를 조회하는 방식으로 조인된다.사원번호는 사원 테이블의 기본 키이다. 즉, SELECT 절의 사원.사원번호
에는 애초에 중복된 데이터가 없다. 따라서, 굳이 DISTINCT 키워드를 사용해 정렬하고, 중복을 제거하는 작업이 필요할지 고민해 봐야 한다.
DISTINCT 키워드는 나열된 열들을 정렬한 뒤 중복된 데이터를 삭제한다.
따라서, DISTICT를 쿼리에 작성하는 것만으로도 정렬 작업이 포함됨을 인지해야 한다.
DISTINCT를 제거한 SQL문과 그 실행 계획은 다음과 같다.