본문 바로가기

Study/SQL

[MySQL] GROUP BY 와 DISTINCT의 차이

728x90
반응형

 이번 SQL 교육을 들으면서는 보통 PK 컬럼만 DISTINCT 하거나 GROUP BY 를 이용해서 결과를 출력해서 몰랐는데,, INDEX가 없는 컬럼에 대해서 DISTINCT와 GROUP BY의 실행결과를 출력해보니 명확하게 차이가 난 것을 확인할 수 있었다.

 

(1) 실행 속도의 차이

 DISTINCT는 363ms 로 결과를 보였지만, GROUP BY는 10분이 넘게 걸렸음.

(2) 출력 결과 확인

아래 출력 결과를 보면 DISTICT는 정렬되지 않은 결과로 return 해주고, GROUP BY는 정렬된 기준으로 결과를 return 해준다.

-- Distinct 
SELECT DISTINCT UPPER_CASE
FROM ORD_ITEM
WHERE ORD_DT BETWEEN '20120301' AND '20120430'
LIMIT 50000;
-- 363ms

SELECT UPPER_CASE
FROM ORD_ITEM
WHERE ORD_DT BETWEEN '20120301' AND '20120430'
GROUP BY UPPER_CASE
LIMIT 50000;
-- 10m25s

Distinct와 GROUP BY 출력 결과

 

GROUP BY 는 내부적으로 DISTINCT를 실행하면서 ORDER BY를 추가적으로 실행한다. 그 만큼 연산 Cost를 더 많이 소모한다는 뜻이고, 당연하게도 내부 정렬이 없는 DISTINCT가 더 속도가 빠르다. PK나 인덱스인 경우에는 큰 차이는 없는 것 같다.

 

결론 : 정렬 과정이 필요 없다면 DISTINCT 를 사용하는 것이 조금이나마 빠른 실행 결과를 얻을 수 있다.

728x90
반응형

'Study > SQL' 카테고리의 다른 글

[MySQL] JOIN조건과 WHERE조건의 차이  (0) 2023.06.23
[MySQL] COUNT(1), COUNT(*), COUNT(col)의 차이  (0) 2023.06.22
[SQL] 2장 인덱스 기본  (0) 2023.06.05
[SQL] 1장 SQL 처리 과정과 I/O  (1) 2023.06.02
[MySQL] DDL, DML 명령어  (0) 2022.12.20