DISTINCT는 정말 중복만 제거할까? 사용 시 주의해야 할 3가지 포인트

Posted by heoncode
2025. 4. 8. 19:48 SQL 기초 정리
반응형
SMALL

DISTINCT는 정말 중복만 제거할까? 사용 시 주의해야 할 3가지 포인트

SQL을 처음 배우거나 실무에서 데이터를 정제할 때 자주 등장하는 키워드 중 하나가 DISTINCT입니다. 보통은 "중복 제거" 용도로만 알고 있지만, 생각보다 주의할 점이 많아 잘못 쓰면 원하는 결과를 얻지 못하거나 오히려 성능이 떨어질 수 있습니다. 이번 글에서는 DISTINCT 사용 시 꼭 알아야 할 3가지 핵심 포인트를 정리해보겠습니다.

1. DISTINCT는 SELECT 절 전체 컬럼 조합의 중복을 제거합니다

많은 초보자들이 실수하는 부분입니다. DISTINCT는 단일 컬럼 기준이 아니라, SELECT 절에 명시된 전체 컬럼 조합이 동일한 경우에만 중복으로 판단합니다.

SELECT DISTINCT name, department FROM employees;

위 쿼리는 이름이 같더라도 부서가 다르면 중복으로 간주하지 않습니다. 따라서 원하는 결과가 아니라면 컬럼 선택을 신중하게 해야 합니다.

2. 정렬 순서를 바꾸면 결과는 같지만 처리 방식은 달라질 수 있습니다

DISTINCT를 사용할 때 정렬 순서는 결과값에 영향을 주진 않지만, 내부적으로 처리되는 방식은 바뀔 수 있습니다. 특히 ORDER BY를 추가하면 SQL 엔진은 정렬 연산을 추가로 수행하기 때문에 성능 차이가 날 수 있습니다.

SELECT DISTINCT department FROM employees ORDER BY department;

이처럼 DISTINCTORDER BY를 함께 사용할 때는 인덱스 활용 여부나 정렬 비용을 고려해야 합니다.

3. DISTINCT는 성능상 이슈를 유발할 수 있습니다

중복 제거는 단순해 보여도 실제로는 많은 비용이 발생할 수 있습니다. 내부적으로는 정렬(SORT) 또는 해시(HASH) 기반의 비교 연산이 일어나며, 데이터 양이 많아질수록 작업량도 크게 증가합니다.

대량의 데이터를 다룰 때는 DISTINCT보다 GROUP BY를 고려하거나, 아예 애초에 데이터가 중복되지 않도록 설계하는 것이 더 효율적일 수 있습니다.

✅ 마무리

DISTINCT는 단순한 기능이지만, 그 동작 원리를 정확히 알고 사용하지 않으면 엉뚱한 결과를 초래하거나 불필요한 성능 저하를 일으킬 수 있습니다. 실무에서는 반드시 컬럼 조합과 데이터 특성을 이해한 뒤에 신중히 사용하는 습관이 필요합니다.

#SQL #DISTINCT #중복제거 #기초문법 #SELECT문 #실무팁 #데이터정제

반응형
LIST