- 데이터베이스 내에서 가장 큰값을 뽑아내 +1을 시키는 자동채번을 구현해야 한다
- 큰값을 가져올때 MAX를 이용하는게 좋을까 아니면 ORDER BY DESC LIMIT을 사용하는게 좋을까
결론으로 말하자면 인덱싱 되지않은 필드라면 MAX()가 좀더 성능상으로 좋다
MAX()
SELECT MAX(FIELD)
FROM SAMPLE_TABLE
SAMPLE_TABLE안에 MAX()를 이용해 FIELD 칼럼에 가장 큰 값을 가져올때 다음과같은 과정을 거친다
인덱싱되지 않은 최악의 경우 MAX()를 사용하면 테이블을 풀스캔하면서 가장큰값을 도출한다
그 결과 테이블 전체를 한번만 통과하면 가장큰값을 가져올수있다
인덱싱이 된 필드도 결국 순회해야하기 떄문에 최악과 최적이 거의 차이가 없다고 볼수있다
ORDER BY LIMIT
SELECT FIELD
FROM SAMPLE_TABLE
ORDER BY FIELD DESC
LIMIT 1
인덱싱 되지않은 필드에 ORDER BY LIMIT을 사용할경우 다음과같은 절차를 거치게된다
우선 FILED에 대해서 SORT를 하고 LIMIT으로 가져오는 작업을 거치게되는데
데이터가 많은 테이블에 경우 실제로 MAX()와 비교했을때 유의미한 성능차이를 가져올수있다
106,000개 행 테이블에 대해 MAX()를 수행한결과 .36초가 걸리고 ORDER BY에 경우 0.84초가 걸렸다고한다
하지만 인덱싱이 된 FIELD라면 MAX()와 거의 차이가 나지 않는다
결론
상위 N개의 결과를 가져온다거나 N번째 ~ M번째 결과를 가져온다거나 하는 작업을 할때는
ORDER BY LIMIT을 사용해야한다
하지만 간단하게 가장 큰값을 가져온다면 MAX()나 MIN()을 사용하는것이 바람직하다
무엇보다 가장좋은것은 간단한 쿼리를 통해서 해결하는것이 좋은 방법이라고 생각한다
다양한 사람들의 여러 견해를 보고싶다면 여기를 참고하면 좋을것같다
ORDER BY LIMIT이 성능상으로 더좋은 결과를 도출하는 경우도 있으니 찾아보면 좋을것같다
'컴퓨터 > 데이터베이스' 카테고리의 다른 글
MySQL 프로시저(Procedure)의 의미와 실행해보기 (0) | 2023.07.08 |
---|---|
데이터베이스 데이터타입과 최적화 (0) | 2023.06.16 |
데이터베이스의 Lock의 특징과 장단점 (0) | 2023.05.31 |
데이터베이스 트랜잭션의 사용처와 특징 (0) | 2023.05.29 |
데이터베이스 빠른 검색을 위한 인덱스(INDEX) (0) | 2023.05.27 |