[데이터베이스] 인덱스
1. 인덱스란?
- 데이터베이스의 저장 성능을 희생(약 10%)하고, 읽기 속도를 높이는 기능
- 책의 목차와 비슷함.
2. 장단점
- 장점
- 읽기 성능↑
- 시스템 부하↓
- 단점
- 데이터 추가, 삭제 시 성능 감소
- INSERT, UPDATE, DELETE 시 추가 연산이 필요하기 때문
- INSERT : 새로운 인덱스 추가
- UPDATE : 기존 인덱스를 사용하지 않음 처리 및 갱신된 데이터의 인덱스 추가
- DELETE : 삭제하는 데이터의 인덱스를 사용하지 않음으로 변경
- 데이터 베이스의 용량을 추가적으로 차지
- 데이터 추가, 삭제 시 성능 감소
3. 사용하는 곳
- 규모가 작지 않은 테이블
- 변경이 자주 발생하지 않는 컬럼
- JOIN, WHERE, ORDER BY에 자주 사용되는 컬럼
- 카디널리티(기수성)이 높은 컬럼
- 카디널리티 : 한 컬럼이 갖고 있는 값의 중복값이 적을수록 높다.
- 중복값이 많을수록 FULL SCAN이 될 가능성이 높아진다.
- 카디널리티 : 한 컬럼이 갖고 있는 값의 중복값이 적을수록 높다.
4. 인덱스 구조
- HashTable
- 해시테이블은 검색속도가 O(1)이지만, 데이터베이스의 검색 조건인 부등호(<, >) 연산에 대해서는 동작할 수 없기 때문에 사용하지 않는다.
- B-Tree
- 이진 트리를 확장하여 자식 노드의 최대 수가 2개보다 많은 트리 구조
- 검색 속도 : O(logN)
- 균형 트리
- B+Tree
- B-Tree를 개선한 구조
- 브랜치 노드에 key, 리프 노드에 key + value를 저장하는 구조
- 리프 노드들은 서로 Linked List로 연결되어 있음
- 메모리 효율↑, 트리의 높이↓ (cache hit↑)
- Full Scan시 리프노드들만 선형탐색하면 된다.
※ 참고
[[MySQL] B-tree, B+tree란? (인덱스와 연관지어서)
'CS > [DATABASE]' 카테고리의 다른 글
[Database] 인덱스 (1) | 2023.09.10 |
---|---|
[DataBase] Flyway 톺아보기 (0) | 2023.07.02 |
Chapter14 트랜잭션 (0) | 2022.02.01 |
Chapter12 정규화 (0) | 2022.01.27 |
Chapter11 ER모델(Entity-Relationship Model) (0) | 2022.01.25 |