[oracle] 부분범위처리 전체범위처리
부분범위처리 전체범위처리 개념
부분범위처리 = 코스요리
요리가 될때마다 하나씩 나옴
전체범위처리 = 한상차림
한번에 빠바박!
판단
select * from emp;
언뜻 보면 전체 범위 처리가 더 맞는것 같지만
row를 하나씩 지날때마다 바로 나타낼수 있기때문에 부분범위처리이다
(보내는 사이즈는 set arraysize로 크기조절이 가능하다)
select * from emp order by sal;
하나씩 조건을 맞춘다고 해도 끝에서 sal을 기준으로 정렬을 해야하기 때문에 바로 보낼수 없다
한번에 모아서 보내야한다 따라서 전체범위처리이다
다음 쇼핑몰 홈페이지를 들어간다고 가정하자
db에는 200개의 데이터
한 페이지에는 표시할수있는 데이터는 10개
1페이지를 클릭할때 10개의 데이터만 보이면된다.
db에서 뒤의 데이터를 가져오기전에 사용자한테 빠르게 보여줄수있다.
부분범위처리가 알맞는 사례이다
만약 여기서 전체범위처리라면??
- 사용자는 1페이지를 클릭해서 1페이지만 보려고 해도 10페이지의 해당하는 데이터가 다 받아질때까지 기다려야지 볼수있다.
- 1페이지만 대충보고 나가면 굳이 필요없는데이터를 불러온것이나 다름없다.
보통 index를 타서 부분 범위를 처리하는 경우가 많다
(index는 데이터가 정렬되어 들어가는것)
- > 정렬이 되어있는것을 하나씩보내는것은 부분범위처리니까
(전체범위는 정렬을 해야지만 보낼수있으니까)
*
무조건 범위처리가 좋은것은 아니다
상황마다 다르다
부분범위처리하면 시작 데이터가 전체범위처리보다 먼저 도착하지만
마지막 데이터는 부분범위처리가 같거나 늦는경우가 많다.
**
실행계획 (set autotrace on)만으로는 부분범위처리인지 전체범위 처리인지 판단하기 힘들다
sql문도 같이 봐야한다