Computer Science/데이터베이스

[데이터베이스] 인덱스 (Index)

excited-hyun 2021. 5. 12. 00:15
반응형

인덱스

인덱스란?

인덱스는 대부분의 책들의 처음이나 마지막에있는 색인과 같은 느낌이다. 데이터는 책의 내용이고그 데이터가 저장된 레코드의 위치가 인덱스 목록의 페이지 번호가 된다. 따라서 인덱스를 사용하는 경우 원하는 값을 가져오기 위해 DB의 모든 데이터를 검색할 필요가 없어 진다.

DB에서의 인덱스는 column의 값과 해당 레코드가 저장된 주소를 키와 값의 쌍으로 만들어 두는 것이다.

이는 항상 정렬되어있어 탐색에 용이하다. 하지만 새로운 값을 추가하거나 수정, 삭제하는 경우 속도가 느려진다.

인덱스는 데이터 저장 성능을 낮추고 탐색 성능을 높이는 기능이라고 볼 수 있다. 

또한 인덱스 관리를 위해 추가적으로 저장공간이 사용되고 이를 관리하기 위한 작업이 추가적으로 필요하다는 단점이 있다.

 

Index의 자료구조

B+-Tree 인덱스

일반적으로 많이 사용되는 알고리즘. 이는 인덱스의 column의 값 변화없이 원래의 값을 이용해 인덱싱 하는 알고리즘이다.

시간 복잡도 O(logn)

 

Hash 인덱스

column의 값으로 해싱하여 인덱싱하는 알고리즘 - 매우 빠른 검색이 가능. 시간복잡도O(1)

그러나 값의 변화를 주기 때문에 특정 문자로 시작하는 검색이나 일부만 검색하는 경우 사용이 불가능하다. 메모리 기반의 DB에 많이 쓰임.

 

hash의 경우엔 SELECT질의문의 조건에 부등호 연산이 들어가는 경우 쿼리문을 수행하는 데에 문제가 발생하기 때문에 B-tree를 주로 사용한다.

 

인덱스를 사용하는게 좋은 경우

- 규모가 작지 않은 테이블

- 삭제, 삽입, 수정이 잦지 않은 컬럼

삽입의 경우 인덱스에 대한 데이터도 추가해야 함 -> 성능 손실

삭제의 경우 인덱스에 존재하는 값을 삭제하지 않고 사용 안한다는 표시만 -> row의 수는 그대로 -> 공간 낭비

- 데이터의 중복도가 낮은 컬럼

 

 

 

CS 면접 대비를 위해 아래 깃허브를 기반으로 작성 되었습니다.

github.com/JaeYeopHan/Interview_Question_for_Beginner

 

JaeYeopHan/Interview_Question_for_Beginner

:boy: :girl: Technical-Interview guidelines written for those who started studying programming. I wish you all the best. :space_invader: - JaeYeopHan/Interview_Question_for_Beginner

github.com

 

728x90
반응형