인프런 커뮤니티 질문&답변

fnelclsrn123님의 프로필 이미지

작성한 질문수

비전공자도 이해할 수 있는 MySQL 성능 최적화 입문/실전 (SQL 튜닝편)

실행 계획 type / 정렬 방식

해결된 질문

24.07.25 12:44 작성

·

174

·

수정됨

0

안녕하세요 강사님! 실행 계획 type에 대해서 궁금한 점이 있습니다. ref가 UNIQUE가 아닌 컬럼의 인덱스를 사용한 경우라고 해주셨는데, 그러면 UNIQUE가 아닌 컬럼의 인덱스이지만 index나 range의 경우에 해당하면 해당 타입으로 표시되는 거고 저 둘(index, range)이 아닐 때, ref 타입으로 표시되는 걸까요?

 

그리고 한 가지 더 궁금한 점이 있는데, 만약 데이터를 조회한 결과들을 바로 View로 보내는 게 아니고 자바 코드를 사용한 계산을 통해 가공해야 하는 상황이라면 굳이 ORDER BY를 쓰지 않고, 데이터 조회 후, Collections.sort()와 같은 자바 코드로 정렬하는 편이 나을까요?

답변 1

2

JSCODE 박재성님의 프로필 이미지
JSCODE 박재성
지식공유자

2024. 07. 25. 15:00

안녕하세요 fnelclsrn123님! 질문해주신 내용에 대해 하나씩 답변 드려볼게요:)

 

  1. 실행 계획 type에 대해서 궁금한 점이 있습니다. ref가 UNIQUE가 아닌 컬럼의 인덱스를 사용한 경우라고 해주셨는데, 그러면 UNIQUE가 아닌 컬럼의 인덱스이지만 index나 range의 경우에 해당하면 해당 타입으로 표시되는 거고 저 둘(index, range)이 아닐 때, ref 타입으로 표시되는 걸까요?

     


    -> 네, 대부분의 경우에는 ref 타입으로 표시됩니다.


    그렇다보니 처음 공부하실 때는 말씀해주신 대로 이해하셔도 됩니다!
    나중에 조금 더 깊이 있게 공부하실 때는 MySQL의 공식문서를 통해
    어떤 상황에 ref가 표시되는 지 추가적으로 공부하셔도 좋을 것 같습니다.

     

    https://dev.mysql.com/doc/refman/8.4/en/explain-output.html#explain-join-types

 

  1. 만약 데이터를 조회한 결과들을 바로 View로 보내는 게 아니고 자바 코드를 사용한 계산을 통해 가공해야 하는 상황이라면 굳이 ORDER BY를 쓰지 않고, 데이터 조회 후, Collections.sort()와 같은 자바 코드로 정렬하는 편이 나을까요?

-> 훌륭한 질문이네요! DB에서 처리했을 때 비효율적인 작업은 애플리케이션 레벨(자바 단)에서 작업을 처리하는 식으로 구성하기도 합니다. 하지만 일반적으로 정렬 작업(ORDER BY)은 DB가 더 효율적으로 처리할 수 있을 때가 많습니다.

예를 들어, 10만 건의 데이터 중에서 생년월일이 가장 빠른 사용자를 찾아야 한다고 가정해봅시다. 자바 애플리케이션에서 이 과정을 수행하려면 10만 건의 데이터를 다 불러온 뒤에 Collections.sort()를 해야 할 겁니다. 오히려 애플리케이션 단에 10만 건의 데이터를 불러온다는 것 자체가 성능상의 비효율을 초래할거에요. 그러다보니 정렬(ORDER BY) 작업은 애플리케이션 단보다 DB에서 처리를 하는 편이기도 합니다:)

 

이 외로 궁금하신 점 있으시면 편하게 질문 남겨주세요~~

fnelclsrn123님의 프로필 이미지
fnelclsrn123
질문자

2024. 07. 25. 15:22

명확한 답변 감사드립니다!