- 개인 공부 목적으로 작성한 글입니다.
- 아래 출처를 참고하여 작성하였습니다.
목차
- 인덱스란?
- 인덱스 내부 자료구조
- 인덱스 거는 컬럼 기준
1. 인덱스란?
- DBMS가 인덱스가 적용된 '컬럼 값'과 '해당 레코드(ROW)가 저장된 주소'를 key-value로 인덱스를 만듭니다.
- 그 인덱스 데이터를 따로 파일로 저장해놓고 그것을 검색해서 검색 효율을 높이는 방법입니다.
- 인덱스는 항상 정렬된 상태를 유지하므로 range scan을 할 수 있습니다.
2. 인덱스 내부 자료구조
- 인덱스에서 가장 많이 사용하는 구조 B-Tree, Hash Table
- 그 중에서도 B-Tree가 많이 쓰이는데 그 이유는 범위 탐색이 가능하기 때문입니다.
- B-Tree는 인덱스를 저장하는 블럭들이 트리 구조를 이루고 있습니다.
- root block, branch block, leaf block이 존재
- leaf block의 깊이가 모두 동일하게 균형이 잡혀있습니다.
- B-tree 인덱스 탐색 과정
- 첫번째로 인덱스의 루트페이지를 접근해서 찾는 값이 어떤 리프 페이지(데이터 페이지)에 있는지 확인 후
- 리프 페이지로 이동 후에 페이지의 내부 행들을 검색해서 해당 데이터를 찾는 순서로 구성됩니다.
3. 인덱스 거는 컬럼 기준
- 자주 조회하는 컬럼, 한 번 조회할 때 오래걸리는 컬럼에서 사용합니다.
- 인덱스로 높은 효율을 얻으려면 해당 인덱스로 많은 부분을 걸러내야 합니다.
- 컬럼 1개 → 카디널리티 가장 높은 것 / 여러 개 → 카디러널리티 높 → 낮은 순
- 카디널리티란 해당 컬럼의 중복된 수치를 의미
- 주민번호 → 카디널리티가 높음 / 성별 → 카디널리티가 낮음