전체범위처리와 부분범위처리

By | 2024-04-18

전체범위처리는 무엇이고, 부분범위처리는 무엇인지 알아보도록 합시다.

아주 간단하게 설명해 보겠습니다.

select *
  from table
;

위 SQL은 전체범위처리일까요?

전체를 대상으로 하니까 전체범위처리가 아닐까요?

저렇게 쿼리를 작성하면 결과가 빨리나오나요? 아니면 늦게 나오나요?

결과가 빨리 나옵니다.

이유는 결과를 배달하는 버퍼에 내용을 금방 다 채울 수 있기 때문입니다.

조금 더 쉽게 생활에 맞춰서 설명해 보겠습니다.

홈쇼핑에 여행상품이 몇명이상이면 출발이라는 거 보신 적 있으시지요?

2명이상 출발에 가격이 싸다면 이 수요를 금방 채우고 여행을 떠날 수 있습니다.

쉽게 대상을 찾고 바로 떠날 수 있다면 이를 부분범위처리라고 생각해도 될 것 같습니다.

만약, 이렇게 수요를 다 찾은 다음에 해당인원이 다 모인 다음에 그 안에서 결혼을 해서 아이가 3명 있는 사람만을 선별한다고 한다면 이 여행을 떠나기 힘들수도 있습니다.

정리하자면, 부분범위처리라고 하면 대상을 금방 찾아서 결과버퍼에 대상을 금방 채워서 결과를 내보낼 수 있는 것이라고 한다면, 전체범위처리는 대상을 찾은 후에 어떤 기준으로 다시 정렬을 하는 것이라고 생각하면 되겠습니다.

정렬이 들어갔으니, 당연히 order by 는 전체범위처리를 하는 것입니다.

또, group by 도 어떤 기준으로 묶는 것이니까 이도 전체범위처리입니다.

자주 쓰시는 Analytic Function ( rownumer() over (partition a, b order by a) ) 이런 것도 전체범위처리입니다.

위 그림에서 빨간 블럭으로 표시된 sort 어쩌고 하는 부분이외에는 전부 일치하지 않나요?

그 부분을 보시면 아시겠지만, 저 부분이 전체범위처리를 하게 되는 것이라고 보시면 됩니다.

full scan이 느린 것이 아니고, 전체범위처리가 부분범위처리에 비해서 늦다라고 이해하셔야 합니다.

나중에 전체범위처리를 해서 더 성능을 향상시킬 수 있는 방법도 존재합니다만 지금은 단순하게 전체범위처리가 부분범위처리보다 늦다라고 이해하시는 것이 정신건강에 좋습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다