전체범위처리는 무엇이고, 부분범위처리는 무엇인지 알아보도록 합시다.
아주 간단하게 설명해 보겠습니다.
select *
from table
;
위 SQL은 전체범위처리일까요?
전체를 대상으로 하니까 전체범위처리가 아닐까요?
저렇게 쿼리를 작성하면 결과가 빨리나오나요? 아니면 늦게 나오나요?
결과가 빨리 나옵니다.
이유는 결과를 배달하는 버퍼에 내용을 금방 다 채울 수 있기 때문입니다.
조금 더 쉽게 생활에 맞춰서 설명해 보겠습니다.
홈쇼핑에 여행상품이 몇명이상이면 출발이라는 거 보신 적 있으시지요?
2명이상 출발에 가격이 싸다면 이 수요를 금방 채우고 여행을 떠날 수 있습니다.
쉽게 대상을 찾고 바로 떠날 수 있다면 이를 부분범위처리라고 생각해도 될 것 같습니다.
만약, 이렇게 수요를 다 찾은 다음에 해당인원이 다 모인 다음에 그 안에서 결혼을 해서 아이가 3명 있는 사람만을 선별한다고 한다면 이 여행을 떠나기 힘들수도 있습니다.
정리하자면, 부분범위처리라고 하면 대상을 금방 찾아서 결과버퍼에 대상을 금방 채워서 결과를 내보낼 수 있는 것이라고 한다면, 전체범위처리는 대상을 찾은 후에 어떤 기준으로 다시 정렬을 하는 것이라고 생각하면 되겠습니다.
정렬이 들어갔으니, 당연히 order by 는 전체범위처리를 하는 것입니다.
또, group by 도 어떤 기준으로 묶는 것이니까 이도 전체범위처리입니다.
자주 쓰시는 Analytic Function ( rownumer() over (partition a, b order by a) ) 이런 것도 전체범위처리입니다.
위 그림에서 빨간 블럭으로 표시된 sort 어쩌고 하는 부분이외에는 전부 일치하지 않나요?
그 부분을 보시면 아시겠지만, 저 부분이 전체범위처리를 하게 되는 것이라고 보시면 됩니다.
full scan이 느린 것이 아니고, 전체범위처리가 부분범위처리에 비해서 늦다라고 이해하셔야 합니다.
나중에 전체범위처리를 해서 더 성능을 향상시킬 수 있는 방법도 존재합니다만 지금은 단순하게 전체범위처리가 부분범위처리보다 늦다라고 이해하시는 것이 정신건강에 좋습니다.