DB Index
테이블에 대한 동작 속도를 높여주는 자료 구조
필요한 항목을 찾기 위해 테이블 전체를 탐색하지 않고 index 정보를 이용하여 자료의 빠른 검색을 가능하게 하는 기능
- index가 항상 정렬된 상태를 유지하기 위해 삽입, 수정, 삭제 시에 추가적인 연산이 필요하다
자료구조
해시테이블
- key - value 로 이루어진 형태로 값들을 저장
- key = 컬럼값, value = 데이터의 위치
- =(등호) 연산에는 특화되어 있지만 >, <(부등호) 연산에는 사용할 수 없음
- 위의 단점으로 인해 잘 사용되지 않는다
B-tree
- 모든 리프 노드들이 같은 레벨을 가질 수 있도록 자동으로 밸런스를 맞춰주는 트리
- 정렬된 순서를 보장한다
B+tree
- B-tree의 발전된 형태 -> 실제 DB에서 사용되고 있는 방식이다
- 값들은 리프노드에만 저장되어 있고 각각의 리프는 LinkedList 로 연결되어 있다
장단점
장점
- 테이블 조회 성능 향상 -> 엄청난 장점..!
단점
- 인덱스 저장을 위한 추가 공간 필요 (DB의 약 10%)
- 인덱스 관리를 위한 추가 작업 필요 (인덱스의 정렬 등)
사용하면 좋은 경우
- 규모가 작지 않은 경우
- 규모가 작은 경우는 index를 사용하지 않더라도 성능상에 문제가 생기지 않을 확률이 높다
- 데이터의 중복도가 낮은 컬럼 (= 카디널리티가 높은 컬럼)
- 삽입, 수정, 삭제가 자주 일어나지 않는 컬럼 (= 주로 조회만 하는 컬럼)
참고
https://www.youtube.com/watch?v=iNvYsGKelYs -> DB Index와 자료구조에 대해 잘 설명되어있음
https://mangkyu.tistory.com/286 -> B-Tree로 인덱스에 대해 이해하기
https://tecoble.techcourse.co.kr/post/2021-09-18-db-index/ -> DB Index 입문