[SQL 튜닝] SQL 문 단순 수정을 통한 튜닝(5): 습관적으로 중복을 제거하는 나쁜 SQL 문

최건우·2023년 12월 9일
0

데이터베이스/SQL

목록 보기
13/13

1. 습관적으로 중복을 제거하는 나쁜 SQL 문

1-1. 현황 분석

부서 관리자의 사원번호, 이름, 성, 부서번호 데이터를 중복 제거하여 조회하는 쿼리가 있다고 가정하자.

SELECT DISTINCT 사원.사원번호, 사원.이름, 사원.성, 부서관리자.부서번호
FROM 사원
JOIN 부서관리자
ON (사원.사원번호 = 부서관리자.사원번호)
;

튜닝 전 실행 계획은 다음과 같다.

  • 부서관리자 테이블의 type 항목이 index이므로, 인덱스 풀 스캔 방식으로 수행된다.
  • 사원 테이블의 type 항목이 eq_ref이므로, 사원번호라는 Primary Key를 사용해 단 1건의 데이터를 조회하는 방식으로 조인된다.
  • DISTINCT를 수행하고자 별도의 임시 테이블(Extra: Using temporary)을 만들고 있다.


1-2. 튜닝 수행

사원번호는 사원 테이블의 기본 키이다. 즉, SELECT 절의 사원.사원번호에는 애초에 중복된 데이터가 없다. 따라서, 굳이 DISTINCT 키워드를 사용해 정렬하고, 중복을 제거하는 작업이 필요할지 고민해 봐야 한다.

DISTINCT 키워드는 나열된 열들을 정렬한 뒤 중복된 데이터를 삭제한다.
따라서, DISTICT를 쿼리에 작서앟는 것만으로도 정렬 작업이 포함됨을 인지해야 한다.



1-3. 튜닝 결과

DISTINCT를 제거한 SQL문과 그 실행 계획은 다음과 같다.

  • DISTINCT 키워드를 제거한 결과, 임시 테이블을 이용한 정렬과 중복 제거를 수행하지 않아도 되므로 Extra 항목의 Using temporary가 삭제되었다.




profile
부족한 경험을 채우기 위한 나만의 기록 공간

0개의 댓글