nickjoIT

INDEX를 쓰는 이유 본문

DB

INDEX를 쓰는 이유

nickjo 2016. 2. 6. 18:02

1. INDEX란?

내가 원하는 데이터의 집합을 순서대로 주소를 가지고 있는 집합.

데이터를 좀더 빠르게 찾을수 있는 도구나 기능으로 생각하면 된다.


2. INDEX의 동작 원리 및 단점

필자가 마광수의 첫사랑” 이라는 책을 빌리려고 도서관에 갔다. “첫사랑” 책이 어디있는지 몰라 해메던 바로 그 때,도서관 벽에 책 목록이 가나다순으로 쭉 정렬되어 나와 있었다. 이것을 보고 쉽게 책을 찾을 수 있었고, 다음부터 그 도서관에 책 빌리러 갈 때언제나 도서관 벽의 목록부터 보고 찾을 것이다.

 INDEX의 작동원리도 마찬가지이다사용자로부터 요청이 들어 오면 그 table의 그 column INDEX의 유무부터 검사한다만약 INDEX가 있으면 INDEX에서 주소를 찾은 다음바로 그 주소에 쓰여진 부분만 조회한다.

 

INDEX의 장점이 빠른 검색이 가능 하다는 점이라는 것은 다 알고 있을 것이다하지만 장점만 있다면 모든 table, column INDEX를 걸어 놓고 마음껏 쓰겠지만실상은 그렇지 않다. 좀 더 주의해서 쓰자는 의미에서 단점에 대해서만 집중적으로 알아보도록 하자.

첫번쨰로, Index가 걸려 있는 table에 어떤 data가 삽입 되었다면 무슨 일이 벌어 지는 지 살펴 보자.

 

 

다음과 같이 사원 테이블이 있다.



사원 테이블의 이름 컬럼으로 index를 하나 만들었다고 하면 다음과 같은 index가 하나 만들어 
질 것이다(index key값과 rowid 두개의 컬럼으로 구성되어 있다)

 

create index Idx-이름

on 사원(이름);


 

여기서 김인건 사원이 입사하여 insert문을 통해 김인건이라는 사원의 data를 삽입 했다.

Index가 없는 테이블이라면테이블에 insert만 하고 끝났을 것이다하지만 index가 걸린 테이블에서는 들어온 김인건” 데이터를 가지고 다시 정렬 해야 한다정렬 과정을 보자.

 우선 이름 index이니까 이름으로 가나다순 정렬이 되어 있을 것이다. “김인건” 사원이 들어갈 위치는 김도익사원과안영민사원의 사이가 될 것이고이 사이를 잘라내게 될 것이다(Index spilt). 그 후, “김인건사원이 이 사이에 들어오게 될 것이고마지막으로 잘라낸 데이터를 붙이게 된다.

                                                 (Table insert로 인한 INDEX spilt )
 
 

이와 같이 index가 없었다면, 테이블에 데이터만 한 건 추가 되고 말 것이지만, 걸려 있는 index 때문에 index테이블을 모두 뜯어 내어 성능을 감소 시킨다는 단점이 있다.

 

 

두번째로, 이번에는 데이터를 삭제 시켰을 때를 살펴보자.

안영민사원이 퇴사하여 테이블에서 지워졌다그러면 index는 안영민사원을 지우는 것이 아니라, “사용 안함” 표시만 한 상태로 그대로 두게 된다 Row의 수는 그대로이다

 

 

이 상태에서 다시 사원 데이터가 삽입 될 경우 index spilt가 일어나며 삽입 될 것이고테이블에서 삭제 시켜도 index에는 사용 안한다는 표시만 할 뿐삭제되지 않을 것이다이와 같은 작업이 반복 된다면 테이블에는 데이터가 10건밖에 없는데, index에는 데이터가 10만 건이 있는 결과를 낳을 수도 있을 것이다이런 경우 index가 무용 지물이 될 것이고검색 시 실행계획이 index range scan이라면 차라리 강제로 hint를 주어 full scan하는 것이 나을 것이다.

 


마지막으로, 데이터를 변경(update) 할 경우를 살펴보자.

이 경우는 변경이라는 것이 이전 데이터가 삭제되고 그 자리에 새 데이터가 들어오는 개념이기 때문에위에서 설명한index에 delete과정과 insert과정이 모두 나타난다즉 변경 전 데이터는 삭제되지 않고삽입으로 인한 index spilt도 일어난다.


이와 같이 index를 만듬 으로써 생기는 단점에는 DML 속도 저하라는 것이 있다.

이 말고도 타 SQL을 망가뜨릴 수도 있고혹시 운영 중에 Index를 만들 경우 아주 간간히 DB shutdown되는 경우도 있다.

 

정말 잘 만들었을 경우” SQL이 빨라진다는 장점이 있다고 마구잡이로 만들지 말고꼭 필요한 곳에 정말 신중하게 index를 생성해야 할 것이다.


3. 인덱스 생성의 장단점 요약

1) 장점

- 검색 속도가 빨라 질수 있다.

- 시스템의 부하를 줄여 전체 시스템의 성능을 향상 시킨다.


2) 단점

- 인덱스는 Database 공간을 차지 한다.

- 인덱스 생성 시 많은 시간이 소요 될 수 있다.

- 데이터 변경 작업 시(Insert, Update, Delete) 성능이 나빠질 수 있다(빈번할 경우)



[참고 사이트]

http://majesty76.tistory.com/55

http://mee2ro.tistory.com/1

Comments