SQL_튜닝_08
포스트
취소

SQL_튜닝_08

지난 시간에는 복합 인덱스에 대해서 공부를 했는데 이번 시간에는 인덱스 스캔 범위에 대해서 조금 공부를 먼저 하도록 하겠습니다 먼저 ROW 데이터와 그 ROW 데이터를 바탕으로 만들어진 임의의 B-Tree입니다 구성은 Root 와 Leaf로만 이루어졌습니다

전체 ROW 데이터

Image

B-Tree

Image

해당 데이터가 반드시 해당 B-Tree처럼 만들어지지 않습니다 예시를 위해서 임의로 만든 B-Tree입니다

첫번쨰

1
2
3
where LEVEL = 1

Image

먼저 단일 수직구조로 보면 이렇게 됩니다 이때 LEVEL = 1을 하는 경우 1에서 멈추는 것이 아니라 다음 ROW까지 스캔을 해서 데이터를 확인 후 멈추게 됩니다 그래서 LEVEL = 2 인 첫 번째 ROW를 스캔하고 아닌 것을 파악했으니 이제까지 스캔했던 데이터를 올리게 됩니다

Image

이는 해당 위의 데이터를 B-Tree 구조로 표현을 했을 때 모양입니다

두번째

1
2
3
4
where LEVEL = 1
AND JOB = 'CLERK'

Image

Image

해당 쿼리는 이렇게 스캔을 하게 됩니다 LEVEL 1이기 때문에 제일 왼쪽 블록을 찾아가서 LEVEL1이면서 JOB 이 CLERK 가 있는지 살펴보게 됩니다 그리고 데이터 하나를 찾게 되고 다음 블록으로 넘어와서 스캔을 쭈욱 하다가 LEVEL 2이고 JOB 이 CLERK인 데이터를 찾아서 여기까지 스캔을 하고 멈추게 됩니다

세번째

1
2
3
WHERE LEVEL BETWEEN 2 AND 3 

Image

Image

이 부분은 금방 이해할 것이라고 생각합니다 LEVEL 이 2인 데이터를 찾는데 2번째 블록의 LEVEL2부터 스캔을 해서 끝까지 스캔을 하게 되는데 이때 스캔 범위와 출력 데이터가 일치하게 됩니다

네번재

1
2
WHERE LEVEL BETWEEN 2 AND 3 
AND JOB = 'MANAGER'

Image

Image

이 부분도 마찬가지다 먼저 LEVEL 2인 데이터를 스캔을 하기 때문에 두 번째 블록을 스캔하고 이때 LEVEL2이고 JOB 이 CLERK 가 스캔 범위에 들어가게 된다 세 번째 블록에서 전부 스캔이 일어나고 이 데이터는 일치하기 때문에 실제 결과 셋에 포함이 되고 세 번째 블록 마지막 LEVEL 3이면서 JOB SALESMAN 멈추게 됩니다

이렇게 우리는 몇 가지 예제를 통해서 스캔 범위와 실제 결과 셋에 해당되는 여러 가지 예시를 보게 되었습니다