DB/이론

[DB] Index란?

yubi5050 2022. 8. 11. 13:56

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로 연결)

표 내용 출처 : 링크

B-Tree & B+ Tree 이미지 원본 링크 (https://rebro.kr/169?category=484170)
B-Tree vs B+Tree 탐색 순서 비교 : 이미지 원본 링크 (https://ssocoit.tistory.com/217)

 

 

참고 문헌

'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