테이블의 조회 속도를 높여주는 자료구조
추가 공간 필요
데이터 변경이 자주 일어나면 오히려 성능이 감소된다
트레이드 오프 관계를 적절히 고려하여 설정해야 함
인덱스 설정 컬럼
- where, select 절에 사용되는 컬럼
- 활용도가 높음
- join 절에 자주 사용되는 컬럼
- 효율적인 검색이 가능
- 고유한 값이 있는 컬럼
- 인덱스를 통해 불필요한 데이터 대부분을 걸러낼 수 있음
- 자주 변경되지 않는 컬럼
- 인덱스로 지정된 컬럼의 값이 바뀌게 되면 인덱스 테이블도 새롭게 갱신되어야 함
인덱스 관리 방식
해시 테이블 (Hash Table)
- key, value로 데이터를 저장하는 자료구조
- 평균적으로 O(1)의 매우 빠른 시간으로 데이터를 탐색할 수 있음
- 하지만 해시 테이블은 = 연산에 최적화 되어있기 때문에 <,> 연산을 빠르게 처리할 수 없음
B+Tree
- B-Tree를 개선한 형태의 자료구조
- 값을 리프노드에만 저장하며 리프노드들 끼리는 링크드 리스트로 연결되어 있음
- 리프노드에만 데이터를 저장하기때문에 하나의 node에 더 많은 포인터를 가질 수 있어 트리 높이가 낮아짐 -> 검색 속도를 높일 수 있음
인덱스 설정 주의사항
- 인덱스는 데이터베이스 메모리를 사용하여 테이블 형태로 저장되므로 개수와 저장 공간은 비례하기 때문에 인덱스를 많이 설정하면 메모리를 많이 잡아먹게 된다
- 인덱스로 지정된 컬럼의 값이 바뀌게 되면 인덱스 테이블이 갱신되어야 하므로 느려질 수 있다
[참고자료]
효과적인 index 설정