데이터베이스에서 인덱스를 사용하는 이유 및 장단점에 대해 설명해주세요.
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의 코딩 일기장:티스토리]