본문 바로가기

DB·SQL

MySQL GROUP BY 보다는 DISTINCT 가 더 빠르다.

반응형

DISTINCT와 GROUP BY 는 쿼리 선택 컬럼의 유니크 값들을 리턴하는 쿼리 구문입니다.

동일한 결과를 가져오기만 쓰다보면 미세한 차이를 발견하게 됩니다.


DISTINCT는 테이블에 저장된 순서 그대로를 가져오고, GROUP BY는 선택 컬럼을 기준으로 정렬된(정순) 결과를 가져옵니다.

즉, 

GROUP BY 는 DISTINCT + ORDER BY 컬럼명 ASC


와 동일합니다.


예를 들어


1. select distinct p_name from product

2. select p_name from product group by p_name



이 두 쿼리는 다른 타입의 DB에서는 정렬되지 않는 동일한 결과를 가져오지만

MySQL/MariaDB 에서는 2번 쿼리는 왼쪽 결과처럼 정순으로 정렬된 결과를 가져옵니다.




GROUP BY 는 내부적으로 DISTINCT를 실행하면서 ORDER BY를 추가적으로 실행합니다.

연산 코스트를 더 많이 소모한다는 뜻이고, 당연하게도 내부 정렬이 없는 DISTINCT가 더 속도가 빠릅니다.

물론 작은 테이블에서는 별차이 없습니다.

백만단위 레코드나 복잡한 쿼리가 되야 좀 차이가 나는게 보입니다.


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

반응형

닫기