티스토리 뷰

데이터베이스에서 인덱스를 사용하는 이유와 장단점에 대해 알아보겠습니다.

 

 

 

 

인덱스(Index)란?


[ 인덱스의 개념을 설명할 때 가장 쉬운 방법은 책의 예를 드는 것이다 ]

예를 들어 책에서 "폭포수 모델"이라는 단어를 찾는다고 했을 때 맨 앞에서부터 한장 한장 "폭포수 모델"이라는 단어를 찾을 수도 있지만, 책의 맨 뒤에 있는 "찾아보기"를 이용하여 "폭포수 모델"을 찾을 수 있다. "찾아보기"는 가나다 순서로 이미 정렬되어 있어서 "ㅍ" 부분을 찾아보면  쉽게 "폭포수 모델" 단어를 찾을 수 있고, 그 옆에 페이지 번호가 적혀 있어서 그 페이지를 펼치면 바로 원하는 내용을 찾을 수 있다.

 

그런데 만약 책 뒤에 "찾아보기"가 없다면 어떨까? 어쩔 수 없이 책의 처음부터 끝까지 단어를 찾아야 한다. 만약 책의 페이지가 얼마 되지 않는다면 어떻게 처음부터 끝까지 찾아보겠지만, 책의 페이지가 1000페이지라면... 그리고 한번 찾는 게 아니라 반복해서 자주 찾는다면... 정말 쉽지 않은일 이라는 것을 알 수 있다.

 

지금까지 예시로 들었던 책은 데이터베이스의 Table이라 할 수 있고, 뒤에 찾아보기는 데이터베이스의 Index라 할 수 있다.

사실 뒤에 찾아보기가 없는 책들도 있는 것처럼 데이터베이스 Index가 없어도 Table은 문제가 없다. 그런데 만약 대용량 Table의 경우 Index가 없다면 select 쿼리를 실행할 때 엄청난 부하가 발생할 수 있고, Index가 있다면 검색 기능이 향상될 수 있다.

 

 

 

[ 그렇다면 Index는 무조건 좋은 것일까? ] 

인덱스를 잘못 사용할 경우 오히려 성능이 저하되는 역효과

예를 들어 DB책에서 데이터베이스라는 단어를 찾는다고 할 때 데이터베이스라는 단어를 Index로 만들었다면 엄청 많은 Index가 존재할 것이다. 단어를 찾으려면 책을 맨 뒤로 넘겨 단어를 찾고 다시 앞으로 넘겨서 찾고, 다시 뒤로 넘겨서 찾고 다시 앞에 와서 찾는 과정을 반복해야 한다. 데이터베이스라는 단어가 너무 많기 때문에 오히려 인덱스를 사용하지 않고 앞에서부터 끝까지 순서대로 찾는 것이 오히려 빠를 것이다. 

 

소용량디비의 경우도 인덱스를 추가하면 더 느릴 수 도 있다. 극단적으로 책이 3페이지 정도 분량의 책이라고 가정했을 때 인덱스를 왔다 갔다 하면서 찾는 것보단 그냥 끝까지 읽는 것이 더 빠르기 때문이다.

 

추가 저장공간이 필요

인덱스가 추가 됨에 따라서 인덱스만큼의 페이지가 추가되게 된다. 책 분량이 늘어난다는 것은 데이터가 그만큼 저장공간을 더 차지한다는 뜻이다. 일반적으로 인덱스는 적게는 10%에서 많게는 20% 정도 차지하는 것이 보통이다.

 

인덱스를 관리하기 위한 추가 작업

책의 내용이 중간에 변경되어 페이지가 추가되었다고 가정했을때 만약에 인덱스가 없다면 단지 페이지를 추가하면 끝나지만 인덱스가 있음으로써 인덱스를 다시 변경해야 한다. 인덱스가 있으므로써 조회는 빨라졌지만 실제 추가, 수정, 삭제 작업은 더 느려질 수 있다.

 

 

[ 인덱스(index)의 장점과 단점 ]

  • 장점
    • 테이블을 조회하는 속도와 그에 따른 성능을 향상시킬 수 있다.
    • 전반적인 시스템의 부하를 줄일 수 있다.
  • 단점
    • 인덱스를 관리하기 위해 DB의 약 10%에 해당하는 저장공간이 필요하다.
    • 인덱스를 관리하기 위해 추가 작업이 필요하다.
    • 인덱스를 잘못 사용할 경우 오히려 성능이 저하되는 역효과가 발생할 수 있다.

 

 

[ 인덱스(index)를 사용하면 좋은 경우 ]

  • 규모가 작지 않은 테이블
  • INSERT, UPDATE, DELETE가 자주 발생하지 않는 컬럼
  • JOIN이나 WHERE 또는 ORDER BY에 자주 사용되는 컬럼
  • 데이터의 중복도가 낮은 컬럼

 

 

 

 

 

참고

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
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
글 보관함