min 과 order by limit 1 중 어느 것이 더 나은 성능을 보일까?

그래서 어느 것을 사용해야 할까?

 

 

< 결과 >


min 값만 구하는 경우

min 을 사용


min 값을 갖는 row 를 찾아야 하는 경우


order by limit 1 을 사용

 

 

< 아래는 부연 설명 >

어떤 값의 min 을 구하기위해 모든 row 를 order by 하는 것이 진짜 이해가 안 되었다.
min 함수를 사용하지 않고, 전체 row 를 order by 하면 성능이 느려지지 않을까? 하는 이유에서.
그런데, order by 로 min 을 구해야하는 상황이 오긴 하더라.

예를 들어 테이블이
a 3
b 8
c 2
d 6
인 경우, 두번째 col 이 최소인 row (c 2)를 뽑기 위해
min 함수를 사용하면 복잡해진다.
(min 값을 구해야 하는 것이 group by 의 결과라면... 더 복잡해지겠지)

그래서 이런 경우, 즉 여러 column 이 있는 테이블에서
하나의 column 을 기준으로 min 값을 갖는 row 를 찾아야 하는 경우에는
order by 를 이용하여 min 을 구하는 편이 좋겠더라.

성능은 얼마나 차이나는지 궁금해서 찾아봄.
https://stackoverflow.com/a/426785
위의 답변에 따르면,
최악의 경우(index가 없는 경우) min 이 order by limit 1 보다 빠르다.
즉, min 을 사용하는 것이 좋다.
최선의 경우(index가 있는 경우) min 과 order by limit 1 의 성능을 비등비등하다.

하지만, index 가 있다고 해도 order by limit 1 은 실행 할 때마다 정렬을 한다.

반면 min은 바로 최솟값을 가져온다.

따라서, 가능하다면 min을 사용하는 편이 좋다.

 

 

+ Recent posts