지난 시간에는 복합 인덱스에 대해서 공부를 했는데 이번 시간에는 인덱스 스캔 범위에 대해서 조금 공부를 먼저 하도록 하겠습니다 먼저 ROW 데이터와 그 ROW 데이터를 바탕으로 만들어진 임의의 B-Tree입니다 구성은 Root 와 Leaf로만 이루어졌습니다
전체 ROW 데이터
B-Tree
해당 데이터가 반드시 해당 B-Tree처럼 만들어지지 않습니다 예시를 위해서 임의로 만든 B-Tree입니다
첫번쨰
1
2
3
where LEVEL = 1
먼저 단일 수직구조로 보면 이렇게 됩니다 이때 LEVEL = 1을 하는 경우 1에서 멈추는 것이 아니라 다음 ROW까지 스캔을 해서 데이터를 확인 후 멈추게 됩니다 그래서 LEVEL = 2 인 첫 번째 ROW를 스캔하고 아닌 것을 파악했으니 이제까지 스캔했던 데이터를 올리게 됩니다
이는 해당 위의 데이터를 B-Tree 구조로 표현을 했을 때 모양입니다
두번째
1
2
3
4
where LEVEL = 1
AND JOB = 'CLERK'
해당 쿼리는 이렇게 스캔을 하게 됩니다 LEVEL 1이기 때문에 제일 왼쪽 블록을 찾아가서 LEVEL1이면서 JOB 이 CLERK 가 있는지 살펴보게 됩니다 그리고 데이터 하나를 찾게 되고 다음 블록으로 넘어와서 스캔을 쭈욱 하다가 LEVEL 2이고 JOB 이 CLERK인 데이터를 찾아서 여기까지 스캔을 하고 멈추게 됩니다
세번째
1
2
3
WHERE LEVEL BETWEEN 2 AND 3
이 부분은 금방 이해할 것이라고 생각합니다 LEVEL 이 2인 데이터를 찾는데 2번째 블록의 LEVEL2부터 스캔을 해서 끝까지 스캔을 하게 되는데 이때 스캔 범위와 출력 데이터가 일치하게 됩니다
네번재
1
2
WHERE LEVEL BETWEEN 2 AND 3
AND JOB = 'MANAGER'
이 부분도 마찬가지다 먼저 LEVEL 2인 데이터를 스캔을 하기 때문에 두 번째 블록을 스캔하고 이때 LEVEL2이고 JOB 이 CLERK 가 스캔 범위에 들어가게 된다 세 번째 블록에서 전부 스캔이 일어나고 이 데이터는 일치하기 때문에 실제 결과 셋에 포함이 되고 세 번째 블록 마지막 LEVEL 3이면서 JOB SALESMAN 멈추게 됩니다
이렇게 우리는 몇 가지 예제를 통해서 스캔 범위와 실제 결과 셋에 해당되는 여러 가지 예시를 보게 되었습니다