[MySQL] GROUP BY는 정렬까지 해준다? vs GROUP BY는 정렬을 해야만 한다? 0 3 1,123

by 내몸매GROUPBY [MySQL] [2019.05.18 16:21:48]


간단한 질문이긴한데 대게 제 주변 사람들은 GROUP BY가 정렬까지 해주는거야 라고 알고있고 저도 그렇게 알고있었는데

요즘 책을보며 느끼는게 뭐냐면 과연 술집 이모가 서비스로 계란말이 주는거마냥 정렬까지 해준다라는 표현이 맞을까라는 생각이 들었습니다

 

아무래도 그룹핑을 하려면 GROUP BY절에 명시된 컬럼들을 기준으로 정렬 작업을 실행한 후에 그룹핑을 하는게 훨씬 효율적이라고 생각하는데

그렇게되면 사실 정렬까지 해주는게 아니라 정렬이 되야지만 그룹핑을 하는거라고 생각하거든요

 

정렬까지 해준다 vs 정렬을 해야만 한다

어떤게 맞을까요??

by 르매 [2019.05.18 16:59:04]

당연한 얘기지만 DBMS는 효율에 집중합니다. 그래서 order by 절이 없다면 정렬은 신경쓰지 않습니다.
다만, 그룹핑을 처리하는 과정에서 종종 이미 정렬된 인덱스를 사용하거나 내부적으로 정렬하여 처리하는게 효율적이기 때문에.. 그 결과가 정렬되어 있을 뿐이죠.

그럼.. 신경쓰진 않지만 결과적으로는 항상 정렬되어 있는가?

그렇지는 않습니다. 옵티마이저가 어떤 실행계획을 채택하는가에 따라 정렬되지 않은 결과도 나올 수 있습니다.
즉, DBMS가 정렬을 보장하도록 하는 방법은.. order by 절을 사용하는 것이 유일한 방법입니다.

(때로는 정렬된 결과가 나오다가도.. 데이터가 많이 쌓이면서 갑자기 정렬되지 않은 결과가 나오기도 합니다. 데이터 분포가 변하면서 실행 계획이 바뀐거죠)

다만, 정렬해야하는가? 와 관련해서는.. order by는 종종 file sort를 발생시키기 때문에.. 피할 수 있다면 피하는게 좋다고 생각합니다. (WAS나 클라이언트에서 정렬 또는 힌트를 사용한 실행계획의 고정)


by 마농 [2019.05.20 07:31:36]

시대의 흐름에 따라 기준이 바뀌는 것 같습니다.
예전엔 Group By 하면 정렬이 된다는 분위기였고, 쓸데 없이 Order By  는 왜해? 하는 분위기.
지금은 정렬이 필요하다면 Order By 를 반드시 붙여줘야 하는 분위기입니다.
Oracle 10G 가 나오면서 분위기가 바뀌었죠.
Group By 방식이 sort 방식만 있었는데 Hash 방식이 도입되었죠.
처음에 오라클이 돌았나? 싶었지만. 지금은 잘 적응하고 있습니다.


by 내몸매GROUPBY [2019.05.20 09:10:08]

두분 답변 모두 감사합니다ㅠㅠ

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입