인덱스란?
- 데이터베이스 인덱스는 데이터 접근 속도를 향상시키기 위해 사용되는 데이터 구조이다.
B-Tree
- 보통 인덱스로 많이 쓰이는 구조의 이름.
- 이진 검색 트리를 일반화한 자료구조.
- 2개 이상의 자식을 가진 노드를 허용하고 탐색에 평균 O(logN)의 시간이 걸린다.
- 대수확장성이라는 특징을 가지고 있어서 더 빠른 속도로 더 많은 양의 데이터를 검색할 수 있다.
대수확장성
- 대수확장성은 트리 깊이가 리프 노드 수에 비해 매우 느리게 성장하는 것을 뜻한다.
인덱스 성능 최적화
- 인덱스는 두 번 탐색하도록 강요한다. 인덱스 리스트 -> 컬렉션 순으로 탐색하기 때문이고 읽기에 따른 비용이 수반된다.
- 이 때문에 사용되지 않거나 중복되는 인덱스, 불필요한 인덱스는 제거해야 한다.
- 인덱스는 컬렉션이 수정되면 같이 수정되야 한다. 이 또한 비용의 발생이다.
- 복합 인덱스를 설정할 때는 인덱스 생성 순서도 중요하다.
- ==, equal 등의 쿼리가 있다면 제일 먼저 인덱스로 설정한다.
- 정렬에 쓰는 필드가 있다면 그 다음 인덱스로 설정한다.
- 다중 값을 출력해야 하는 필드(<, >, between 등)가 있다면 그 다음 인덱스로 설정한다.
- 카디널리티(값의 유니크 정도)가 높은 순서대로 설정한다.
출처
CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조 - 큰돌