아래 ㄱ, ㄴ, ㄷ 중에서 뭐가 효율이 높을까요?
처음에 구글링 해서 ㄷ이 가장 높을 거라고 생각 했고 효율이 가장 낮은건 ㄱ이라고 생각을 했는데
쿼리분석기에서 성능비교 ( ctrl + l ) 해보니
(ㄱ:25%) (ㄴ:41%) (ㄷ:34%) 로 효율이 ㄱ이 가장좋더라고요
ㄱ으로 선택하는 것이 맞을까요? (성능 분석기를 통해서 비용이 가장 적은 놈을 선택해서 하는것이 맞는건가요?)
ㄱ) Count(*) Over() As TotalCount 로 카운트를 가져옴
With As TB_TMP (
Select ROW_NUMBER() Over (Order By insertdate) As RowNum,
, Count(*) Over() As TotalCount
* From TB_TABLE
) Select * From TB_TMP WHERE RowNum Between x And y
ㄴ) Max(RowNum)로 카운트를 가져옴
With As TB_TMP (
Select ROW_NUMBER() Over (Order By insertdate) As RowNum, * From TB_TABLE
) Select *, (Select Max(RowNum) From TB_TMP) As TotalCount From TB_TMP WHERE RowNum Between x And y
ㄷ) Select Count(*)로 카운트를 가져옴
With As TB_TMP (
Select ROW_NUMBER() Over (Order By insertdate) As RowNum, * From TB_TABLE
) Select *, (Select Count(*) From TB_TMP) As TotalCount From TB_TMP WHERE RowNum Between x And y
참고URL)
https://m.blog.naver.com/monkeychoi/220629982940
TB_TABLE에서 데이터를 가져오는 건 모두 Fullscan인 것 같네요.
데이터가 적고, index가 없을 때는 성능비교가 어려워요.
dummy 데이터를 백만, 천만을 넣고 테스트를 해보시면 알수 있을 거라 여김요 ^^