Index란?
추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조
Index가 효율적인 이유
모든 요소에 효율적으로 접근 할 수 있는 균형 적인 트리 구조와 트리 깊이의 대수 확장성 때문
대수확장성 : 트리 깊이가 리프 노드 수에 비해 느리게 성장하는 것을 의미 (ex. depth 1 추가시 node 당 4개 인덱스추가)
Index 관리
DBMS에서 index는 항상 최신의 정렬된 상태로 유지
INSERT, UPDATE, DELETE가 수행시 인덱스에 대한 추가 작업 필요
- INSERT: 신규 데이터에 인덱스 추가
- DELETE: 해당 데이터 인덱스 삭제
- UPDATE: 기존 인덱스 삭제 및 수정 데이터에 인덱스 추가
Index 장단점
장점 : 테이블 조회 성능 향상 / 시스템 부하 감소
단점
- 인덱스를 관리하기 위한 추가 DB 공간 필요
- 인덱스 관리를 위한 추가 작업 필요 (DML에 비교적 취약)
Index 적용하면 좋은 유형
탐색 성능을 효율적으로 개선할 수 있는 규모가 큰 Table (ex. 검색, 정렬 등)
탐색 성능을 효율적으로 개선할 수 있는 JOIN, WHERE, ORDER BY 가 있는 경우
- 데이터들이 정렬되어되어 WHERE / ORDER 등 에 맞는 데이터들을 빠르게 탐색 가능
INSERT, UPDATE, DELETE가 자주 발생하지 않는 경우 (자주 발생시 Index 관리에 대한 오버헤드가 커짐)
Index 만드는 법
인덱스 만드는 법은 DB마다 다름
- MySQL : Primary key 옵션으로 만든 기본키로 만든 클러스터형 인덱스나, 명령어 기반의 세컨더리 인덱스 가능
- MongoDB : ObjectId 필드 자동 생성, 세컨더리키 추가 가능
Index 자료 구조 종류
B-Tree, B+Tree : 탐색 성능을 높이기 위해 트리가 한쪽으로 치우치지 않고 Balanced 있게 하는 Tree의 일종
📁 B-tree Vs B+tree
구분 | B-tree | B+tree |
데이터 저장 | leaf node / branch node |
only leaft node |
트리의 높이 | 높음 | 낮음(한 노드 당 key를 많이 담을 수 있음) |
풀 스캔 시, 검색 속도 | 모든 노드 탐색 | leaft node에서 선형 탐색 |
키 중복 | 없음 | 있음 (leaft node에 모든 데이터가 있기 때문) |
검색 | 자주 접근 되는 노드를 root node 가까이 배치 가능 root node 에서 가까울 경우, branch node에도 데이터가 존재하기 때문에 빠름 |
leaft node 까지 가야 데이터 존재 |
링크드 리스트 |
없음 | 있음 (left node 끼리 linked list로 연결) |
표 내용 출처 : 링크
참고 문헌
'DB > 이론' 카테고리의 다른 글
[DB] Clustering, Sharding, Replication 차이 (0) | 2022.10.03 |
---|---|
[DB] Replication 이란? (Feat. Mysql, Mongo) (0) | 2022.10.03 |
[DB] Transaction 격리 수준 종류 (Isolation Level) (0) | 2022.08.10 |
[DB] PostgreSQL vs MySQL (0) | 2022.08.10 |
[DB] ORM 이란? (0) | 2022.06.02 |