인덱스
인덱스는 데이터베이스 분야에 있어서 테이블에 대한 동작의 속도를 높여주는 자료구조이다. 테이블 내의 1개의 컬럼 혹인 여러 개의 컬럼을 이용하여 생성될 수 있다.
🐶 장점 : 테이블을 조회하는 속도와 그에 따른 성능을 향상시킬 수 있음, 전반적인 시스템의 부하를 줄일 수 있음
🐱 단점 : 인덱스를 관리하기 위해 데이터베이스의 약 10%에 해당하는 저장공간이 필요함, 인덱스를 관리하기 위해 추가 작업이 필요함, 인덱스를 잘못 사용할 경우 오히려 승능이 저하되는 역효과 발생 가능
인덱스를 사용하는 것만큼이나 생성된 인덱스를 관리해주는 것도 중요하다. 그렇기 때문에 사용하지 않는
인덱스를 사용하면 좋은 경우
- 규모가 작지 않은 테이블
- INSERT, UPDATE, DELETE가 자주 발생하지 않는 컬럼
- JOIN이나 WHERE 또는 ORDER BY에 자주 사용되는 컬럼
- 데이터의 중복도가 낮은 컬럼
- 기타 등등
인덱스의 자료구조
1. 해시 테이블
해시 테이블 기반의 DB 인덱스는 (데이터=컬럼의 값, 데이터의 위치)를 (Key, Value)로 사용하여 컬럼의 값으로 생성된 해시를 통해 인덱스를 구현하였음. 시간 복잡도는 O(1)이며 매우 빠른 검색을 지원함
그러나 DB인덱스에서 해시 테이블이 사용되는 경우는 제한적임. 부등호 연산(>, <)이 자주 사용되는 데이터베이스 검색을 위해서는 해시 테이블이 적합하지 않음. 주로 메모리 기반의 데이터베이스에서 많이 사용함
2. B+ Tree
DB 인덱스를 위해 자식 노드가 2개 이상인 B-Tree를 개선시킨 자료구조
데이터베이스의 인덱스 컬럼은 부등호를 이용한 순차 검색 연산이 자주 발생될 수 있다. 이러한 이유로 BTree의 리프노드들을 LinkedList로 연결하여 순차검색을 용이하게 하는 등 BTree를 인덱스에 맞게 최적화하였다. 시간 복잡도는 O($\log_2n$)이다.
💖 참고 자료 💖