DISTINCT는 정말 중복만 제거할까? 사용 시 주의해야 할 3가지 포인트
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;
이처럼 DISTINCT
와 ORDER BY
를 함께 사용할 때는 인덱스 활용 여부나 정렬 비용을 고려해야 합니다.
3. DISTINCT
는 성능상 이슈를 유발할 수 있습니다
중복 제거는 단순해 보여도 실제로는 많은 비용이 발생할 수 있습니다. 내부적으로는 정렬(SORT) 또는 해시(HASH) 기반의 비교 연산이 일어나며, 데이터 양이 많아질수록 작업량도 크게 증가합니다.
대량의 데이터를 다룰 때는 DISTINCT
보다 GROUP BY
를 고려하거나, 아예 애초에 데이터가 중복되지 않도록 설계하는 것이 더 효율적일 수 있습니다.
✅ 마무리
DISTINCT
는 단순한 기능이지만, 그 동작 원리를 정확히 알고 사용하지 않으면 엉뚱한 결과를 초래하거나 불필요한 성능 저하를 일으킬 수 있습니다. 실무에서는 반드시 컬럼 조합과 데이터 특성을 이해한 뒤에 신중히 사용하는 습관이 필요합니다.
#SQL #DISTINCT #중복제거 #기초문법 #SELECT문 #실무팁 #데이터정제
'SQL 기초 정리' 카테고리의 다른 글
SELECT *를 쓰면 왜 안 좋을까? 실무에서 컬럼을 명시하는 이유 (0) | 2025.04.10 |
---|---|
NULL은 0이 아니다! SQL에서 NULL이 가진 의미와 주의점 (0) | 2025.04.10 |
WHERE 절 조건의 순서가 성능에 영향을 줄까? (0) | 2025.04.10 |
INNER JOIN과 OUTER JOIN, 뭐가 다를까? 실무에서 꼭 알아야 할 차이점 (0) | 2025.04.10 |
GROUP BY와 ORDER BY의 차이는 뭘까? 비슷해 보이지만 전혀 다른 역할 (0) | 2025.04.09 |