티스토리 뷰

반응형

월말+짧은연휴 콤보크리 탓인지

괜히 하는일 없이 바쁜 요즘이다.

덕분에 인덱스를 뜯어 보고자 했던 것도

어쩌다보니 좀 미뤄졌는데

더 이상 미루면 안될 것 같아서 다시

키보드를 잡았다. ㅎㅎㅎ

이번에는

인덱스의 내부가 어떻게 이루어져 있는지

그리고, 어떤식으로 동작하는지에 대해서

간략하게 정리해 보도록 하겠다.

참고로 인덱스에 대한 기본설명과

종류 및 특징에 대해서 아직 이해하지 못했다면

2009/09/22 - [DB(MS, PG, MY..etc)] - 색인(Index)의 기본개념에 대해서
2009/09/24 - [DB(MS, PG, MY..etc)] - 인덱스(Index)의 종류와 특징에 대해

위 링크의 포스팅을 먼저 읽고 오길 바란다.
인덱스의 내부모습

인덱스의 내부모습을 이해하기 위해서 자주 사용되는 그림을 먼저 보길 바란다.

 
위 그림은 B-Tree(Balanced Tree) 이다.

인덱스가 설정되어 있을 때 Select가 왜 빨라지는지를 설명해 주고 있다.

위 그림에서 봤을 때

B-Tree의 최상위 레벨을 루트노드(Root Node)라고 하고  최하위 레벨을 리프노드(Leaf Node) 라고 한다.

그리고, 여기에서는 레벨이 2단계이지만

레벨이 더 깊어졌을 경우에 루트노드와 리프노드 사이에 존재하는 노드는 중간노드라고 불린다.

용어에 대한 설명은 이쯤으로 하고...

본격적으로 인덱스가 왜 Select에 좋은지에 대한 이야기를 좀 해보도록 하겠다.

위의 그림을 예로 들어서.

만약 인덱스가 설정되어 있지 않았다고 했을 때 '23'이란 데이터를 검색한다면 데이터 검색을 몇 번 해야 할까.

23이란 데이터가 리프노드에 위치해 있고, 게다가 제일 마지막에 있으니 테이블 전체를 뒤져야 할 것이므로

총 16회의 검색이 이루어져야 23이란 데이터를 찾을 수 있다.

이처럼 단순무식하게 처음부터 끝까지 찾는 것을 테이블 스캔이라 한다.

그런데 만약 위 그림처럼 인덱스가 설정되어 있다면 어떨까.

지난번에 설명한 바 있는 넌클러스터 색인을 잠시 떠올려 보길 바란다.

"찾아보기에서 원하는 데이터를 찾아서 색인이 가리키는 페이지로 이동한 뒤, 해당 페이지에서 데이터를 찾는다..."

여기서도 이와 비슷~하게

루트노드의 3번이 가리키는 세번째 리프노드로 가서 23이란 데이터를 찾는 과정이 일어나게 되는데

이 경우 검색 5번만에 원하는 데이터를 찾을 수가 있다.

테이블 스캔의 경우와 비교했을 때 약 3분의 1로 검색속도가 단축이 된다. 솔깃하지 않은가.... 이좋은걸...ㅎㅎㅎ
뭐.... 하지만 지난번에도 이야기 했듯이 세상에 좋은것만 있을 수는 없는거다.

역시나 이 좋은 인덱스에도 치명적인 단점이 존재하는데,

그것이 바로 데이터 변형(Update, Delete, Insert)이 일어났을 경우이다.

다음 그림을 보고 위 그림과 무엇이 다른지를 살펴보길 바란다.


두번째 그림의 시나리오는 데이터 '16'이 Insert되었을 경우를 가정했을 때 일어나는 일을 표현 해 본 것이다.

처음과 비교해 보길 바란다.

데이터값 16이 Insert되기 위해서는 두번째 리프노드 다음에 들어가야 하는데 페이지 공간이 부족하기 때문에

데이터 페이지 스플릿(Split, 분열, 분할)이 일어나게 된다.

즉, 두번 째 리프가 절반으로 나뉘면서 16이란 데이터가 추가될 새로운 리프가 생기는 것이다.

그리고 루트노드에도 새로 추가된 리프 4가 추가 되어 가리키게 된다.

.
.
.

간단하게 설명해 보았으나, 그리 간단하지 않게 되었다. ㅎㅎㅎㅎ

그래도

처음에 던졌던 질문인

왜? Select에는 좋지만, Insert에는 나쁠까?

에 대한 대답은 어느정도 되었을 것으로 생각된다.

다음번에는 좀 더 구체적인 내용을 다루어 보도록 하겠다.



요즘 날씨도 점점 책 읽기에 좋아져 가고,

이렇게 잘 모르던 것에 대해 하나하나 알아나가는 재미 또한 쏠쏠해지니

왠지 모르게 기분이 업되는 가을이다. ㅎㅎㅎ



.
.
.
.
.



                      (짤방은 요즘 아동관련 어떤 사건때문에 열받아서.... 아오....조두순 죽여버려...)






블로그코리아에 블UP하기
반응형
댓글
반응형
12-01 06:46
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함