데이터베이스 인덱스

김멉덥·2022년 8월 13일
0

기술면접 공부

목록 보기
3/8
post-thumbnail

데이터베이스에서 인덱스를 사용하는 이유 및 장단점에 대해 설명해주세요.

Backend-Interview-Question

DB 인덱스란?

  • 인덱스는 DB 테이블에 대한 검색 성능의 속도를 높여주는 자료구조이다.
  • 특정 컬럼에 인덱스를 생성하면, 해당 컬럼의 데이터들을 정렬하여 별도의 메모리 공간에 데이터의 물리적 주소랑 함께 저장된다.
  • 또한, 인덱스 생성 시 오름차순으로 정렬하기 때문에 정렬된 주소체계라고 표현할 수 있다.
  • 즉, 인덱스를 책에서의 목차라고 생각하면 편하다.
    • 책에서 원하는 내용을 찾을 때 목차나 색인을 이용하면 훨씬 빠르게 찾을 수 있듯이 테이블에서 원하는 데이터를 찾기 위해 인덱스를 이용하면 빠르게 찾을 수 있다.
  • 그러므로 데이터=책의 내용, 인덱스=책의 목차, 물리적 주소=책의 페이지 번호 라고 생각하면 된다.

인덱스의 자료구조

인덱스에는 대표적인 자료구조로 해시 테이블B+Tree가 있다.

해시 테이블

  • 해시 테이블은 컬럼의 값과 물리적 주소를 (key, value) 구조 한 쌍으로 저장하는 자료구조
  • 하지만 해시 테이블은 등호(=) 연산에 최적화되어있기 때문에 실제로 인덱스에서 잘 사용 X
  • 데이터베이스에선 부등호(<,>) 연산이 자주 사용되는데, 해시 테이블 내의 데이터들은 정렬되어 있지 않으므로 특정 기준보다 크거나 작은 값을 빠른 시간 내에 찾을 수가 없다.

따라서 인덱스에서 더 자주 쓰는건 아래의 B+Tree 이다.

B+Tree

  • Root(기준) / Branch(중간) / Leaf(말단) 의 Node로 구성
  • Leaf Node에만 데이터를 저장하고 Leaf Node들끼리 LinkedList로 연결되어 있다.
    • 탐색 순서는 아래와 같다.

인덱스의 장단점

장점

  • 데이터가 정렬되어 있기 때문에 테이블에서 검색과 정렬의 속도를 향상시킨다.
  • 즉, 빠른 검색 성능을 가지고 있는 것이 장점이다.

단점

  • 인덱스를 구성하는 비용의 측면에서 단점이 존재한다.
  • 즉, 추가 / 수정 / 삭제 연산시에 인덱스를 형성하기 위한 추가적인 연산과 저장공간이 요구되기 때문에 무조건 인덱스 스캔이 좋은 것은 아니며, 결론적으로 인덱스를 많이 거는 것은 속도 향상에 좋지 않다.
    ⇒ 따라서, 트레이드 오프 관계에 놓여있는 요소들을 종합적으로 고려하여 인덱스를 생성해야한다.

정리

데이터베이스에서 인덱스를 사용하는 이유 및 장단점에 대해 설명해주세요.

  • 인덱스는 DB 테이블에 대한 검색 성능의 속도를 높여주는 자료구조로, 책의 목차같은 존재입니다.
  • 데이터베이스에서 인덱스를 사용하는 이유는 검색성능을 향상시키기 위함 입니다.
  • 장점으로는 빠른 검색 성능을 들 수 있습니다.
  • 단점으로는 추가, 수정, 삭제 연산시에 인덱스를 형성하기 위한 추가적인 연산과 저장공간이 요구되어 많은 인덱스 사용은 속도 향상에 좋지 않습니다.
  • 따라서, 인덱스를 생성할 때에는 트레이드 오프 관계에 놓여있는 요소들을 종합적으로 고려하여 생성해야합니다.

참고 자료

[DB] 데이터베이스 인덱스(Index) 란 무엇인가?
[DB] 11. 인덱스(Index) - (1) 개념, 장단점, B+Tree 등
출처: https://rebro.kr/167 [Rebro의 코딩 일기장:티스토리]

profile
데굴데굴

0개의 댓글