AtraFelis's Develop Diary

[DataBase] 인덱스(index)란? 본문

DataBase

[DataBase] 인덱스(index)란?

AtraFelis 2024. 9. 4. 22:42

어떤 테이블에서 특정한 값을 검색할 때, '이진 탐색'을 적용하기 위해서 만들어놓는 하나의 속성을 기준으로 정렬된 테이블의 사본index라고 한다.

예를 들어, 어떤 커뮤니티의 게시글 정보를 저장하는 테이블에 천만 개의 정렬되지 않은 데이터가 들어가 있다고 가정하자. 여기서 *"작성자가 'AtraFelis'인 게시글만 찾아주세요*"라고 쿼리문을 날렸다고 했을 때 어떻게 되겠는가?

ID 작성자 제목 내용
1 AtraFelis    
2 홍길동    
... 이춘향    
1,000 홍길동    
... AtraFelis    

대충 이런 테이블이 있다고 생각해보자.

 

정렬되어 있지 않으므로 일단 이진탐색을 사용할 수 없을 것이다. 그렇다면 처음부터 일일히 비교를 하던가, 아니면 테이블 전체를 불러와서 정렬한 후에 이진탐색을 하던가... 뭐 여러가지 방법이 있겠지만, 당연히 위와 같은 방법은 느릴 것이다.

그렇기에 여기서 테이블의 사본인 index가 등장한다. 다시 한 번 말하지만, index는 한 속성을 기준으로 정렬된 테이블의 사본이다. 즉, 정렬되어 있으므로 '이진탐색 binary search'를 진행할 수 있다.

위의 예시에서는 작성자 를 기준으로한 index를 만들어 두면 될 것이다. 그리고 이 index를 기준으로 이진 탐색을 진행하겠지. 이렇게 index를 사용하면 검색에 사용되는 시간을 획기적으로 줄일 수 있다.

 


 

그렇다면 index의 단점은 무엇일까?

  1. 당연하게도 테이블의 사본을 미리 만들어서 저장을 해두어야 하므로, 추가적으로 DB의 용량을 차지하게 된다.
  2. 이 테이블에 추가/수정/삭제를 하는 데에도 시간이 더 많이 소요된다. (데이터를 원본 테이블에만 추가해놓고 검색용 사본 테이블에 추가를 안 해놓으면 무슨 의미가 있겠는가.)

그러므로 꼭 필요한 속성에만 index를 만들어 놓도록 하자.