DATABASE

[DB] 인덱스 (INDEX)

집한구석 2021. 6. 24. 22:40
728x90

인덱스 (INDEX)

  • 추가적인 쓰기작업, 저장공간을 활용하여 테이블에 대한 동작 속도를 높여주는 자료구조

인덱스 장단점

  • 테이블 조회속도와 성능을 향상시킬 수 있음 (검색에 최적화)
  • 전반적인 시스템 부하를 줄임
  • 인덱스 관리를 위한 추가 작업 필요, 인덱스를 관리하기 위해선 DB의 약 10% 해당하는 저장공간 필요
  • 인덱스는 기본적으로 이진트리 검색을 사용하기 때문에 기본적으로 정렬이 되어있어서, 인덱스를 잘못 사용할 경우 오히려 성능 저하될 수 있음 (INSERT, DELETE, UPDATE가 자주 발생하는 테이블에 인덱스를 걸 경우 오히려 성능 저하)

인덱스 알고리즘

  • Hash Table과 B+ Tree이 있지만 일반적으로 B+ Tree를 사용

B+ Tree 정의

https://www.geeksforgeeks.org/difference-between-b-tree-and-b-tree/ 참고

  • B-Tree 를 개선시킨 자료구조
  • 키에 의해서 각각 식별되는 레코드의 효율적인 삽입, 검색과 삭제를 통해 정렬된 데이터를 표한하기 위한 자료구조

B+ Tree 특징

  • 리프노드, 논리노드, 루트 노드로 구성되어 있음
  • 리프노드는 인덱스와 함께 실제 데이터가 저장되는 노드를 가짐
  • 논리노드는 리프노드까지의 경로 역할, 루트노드는 출발점노드이며 인덱스 Key만 가짐
  • 리프노드는 서로 LinkedList로 연결되어 있음

인덱스 종류

  • 클러스터 인덱스 : 테이블당 1개만 허용, 해당 컬럼기준으로 물리적으로 정렬 (물리적으로 정렬되서 리프노드가 필요 X, 추가적인 공간 X), PRIMARY KEY 설정시 자동으로 생성
  • 논클러스터 인덱스 : 테이블 249개까지 생성 가능, 테이블의 페이지를 정렬하지 않고 새로운 공간을 할당, 많은 공간을 차지하게 됨, 종류로 단일인덱스와 복합인덱스가 논클러스터 인덱스에 포함됨
  • 단일 인덱스 : 인덱스에 컬럼이 하나 걸린 경우
  • 복합 인덱스 : 인덱스에 컬럼이 두개 이상이 걸린 경우

'DATABASE' 카테고리의 다른 글

[DB] REPLICATION(리플리케이션)  (0) 2021.11.13
[DB] 쿼리 처리 과정  (0) 2021.06.26
[DB] 샤딩  (0) 2021.06.02
[DB] 트랜잭션  (0) 2021.05.16
[MySQL] 쿼리 튜닝 기초  (0) 2020.12.15