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을 사용하는 편이 좋다.
'SQL' 카테고리의 다른 글
[SQL] Hacker Rank Placements 쿼리 설명 (0) | 2021.07.01 |
---|---|
[SQL] Hacker Rank Binary Tree Nodes 쿼리 설명 (0) | 2021.07.01 |
[SQL] cheating sheet 정리 (0) | 2020.12.21 |
[SQL] null 일 때 다른값을 기준으로 정렬하기(order by) (0) | 2020.05.14 |
[SQL] self join 예제 (0) | 2020.05.13 |