인덱스(Index)란?
인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 DB 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 데이터베이스의 index 는 책의 색인과 같다.

인덱스의 장점과 단점
장점
- 테이블을 조회하는 속도와 그에 따른 성능을 향상시킬 수 있다.
- 전반적인 시스템의 부하를 줄일 수 있다.
단점
- 인덱스를 관리하기 위해 DB의 약 10%에 해당하는 저장공간이 필요하다.
- 인덱스를 잘못 사용할 경우 오히려 성능이 저하되는 역효과가 발생한다(*).
(*) CREATE, DELETE, UPDATE의 발생이 빈번한 속성에 인덱스를 걸게 되면, 인덱스의 크기가 비대해져서 성능히 오히려 저하되는 역효과가 발생할 수 있다.
인덱스를 사용하면 좋은 경우
- 규모가 큰 테이블에서 소량의 데이터를 검색
- INSERT, UPDATE, DELETE가 자주 발생하지 않는 컬럼
- JOIN이나 WHERE 또는 ORDER BY에 자주 사용되는 컬럼
인덱스(Index)의 자료구조
인덱스를 구현하기 위해서는 대표적으로 해시 테이블과 B+Tree 자료구조를 사용한다.
해시 테이블(Hash Table)
해시 테이블은 (Key, Value)로 데이터를 저장하는 자료구조 중 하나로 빠른 데이터 검색이 필요할 때 유용하다. 그러나 부등호 연산(>, <)이 자주 사용되는 데이터베이스 검색에는 해시 테이블이 적합하지 않다.

B+Tree
B+Tree는 DB의 인덱스를 위해 자식 노드가 2개 이상인 B-Tree를 개선시킨 자료구조.
B+Tree의 특징
- 리프노드만 인덱스와 함께 데이터(Value)를 가지고 있고, 나머지 노드(Index)들은 데이터를 위한 인덱스(Key)만을 갖는다
- 리프노드들은 LinkedList로 연결되어 있다
- 데이터 노드 크기는 인덱스 노드 크기와 같지 않아도 된다
B+Tree는 BTree의 리프노드들을 LinkedList로 연결하여 순차검색을 용이하게 했다. 따라서 인덱스에 맞게 최적화된 자료구조이다.

'CS > DB' 카테고리의 다른 글
| DB 면접 대비 - 트랜잭션(Transaction) (0) | 2024.03.14 |
|---|---|
| DB 면접 대비 - 정규화 & 이상현상 (Normalization & Anomaly) (0) | 2024.03.13 |
| DB 면접 대비 - 프로시저(Procedure) (0) | 2024.03.13 |
| DB 면접 대비 - 트리거(Trigger) (0) | 2024.03.13 |