img_TBL 테이블에 인덱스 선언이 되어있지 않은 num 이라는 컬럼의 최대값을
알고 싶을때 아래와 같은 두가지 경우를 생각할수 있습니다.
(물론 더많을수 있겠지만 제가 아는 한도내에서...)
select top 1 num from img_TBL order by num desc
-----------------------------------------------------------------
select max(num) from img_TBL
레코드 갯수는 약 5000개가 있고 num컬럼의 값들은 유니크하지 않습니다.
결과적으로 첫번째 쿼리의 최종비용은 0.175 이고
두번째 쿼리의 최종비용은 0.0176 입니다.
무려 10배 차이가 납니다.
원인은 바로 첫번째 쿼리의 처리를 하기위하여 Sort/TopN Sort 작업의 I/O 비용과 cpu 비용이
0.01과 0.09 정도가 나옵니다.
반면 두번째 쿼리는 MAX 값을 구하기 위하여 거의 비용이 들지 않습니다.(I/O 비용 0, CPU 비용 0.000487)
그러므로 두번째 쿼리를 강추합니다.~!
물론 num 이라는 컬럼이 인덱스화 되어있다면 첫번째 쿼리가 근소한 차이로 더 비용이 좋습니다.
알고 싶을때 아래와 같은 두가지 경우를 생각할수 있습니다.
(물론 더많을수 있겠지만 제가 아는 한도내에서...)
select top 1 num from img_TBL order by num desc
-----------------------------------------------------------------
select max(num) from img_TBL
레코드 갯수는 약 5000개가 있고 num컬럼의 값들은 유니크하지 않습니다.
결과적으로 첫번째 쿼리의 최종비용은 0.175 이고
두번째 쿼리의 최종비용은 0.0176 입니다.
무려 10배 차이가 납니다.
원인은 바로 첫번째 쿼리의 처리를 하기위하여 Sort/TopN Sort 작업의 I/O 비용과 cpu 비용이
0.01과 0.09 정도가 나옵니다.
반면 두번째 쿼리는 MAX 값을 구하기 위하여 거의 비용이 들지 않습니다.(I/O 비용 0, CPU 비용 0.000487)
그러므로 두번째 쿼리를 강추합니다.~!
물론 num 이라는 컬럼이 인덱스화 되어있다면 첫번째 쿼리가 근소한 차이로 더 비용이 좋습니다.