철학과 학생의 개발자 도전기

인덱스 본문

데이터베이스

인덱스

Younghun 2023. 10. 28. 11:19

1. 인덱스란

  • 데이터 검색 속도를 향상시키기 위한 자료구조
  • 특정 속성의 값과 해당 레코드의 위치를 매핑하여, 데이터를 빠르게 찾을 수 있다.
  • B-트리를 사용하여 O(logN)의 시간복잡도로 탐색이 가능하다.
  • 추가적인 저장 공간을 필요로 하며 데이터 삽입, 수정, 삭제 시 시간이 더 많이 소요된다.

2. 클러스터형 인덱스

  • 테이블 당 1개만 생성 가능
  • 클러스터가 적용된 속성을 기준으로 데이터가 정렬됨
  • PK는 자동으로 클러스터형 인덱스 역할 수행

출처: https://kosaf04pyh.tistory.com/293
출처: https://kosaf04pyh.tistory.com/293

데이터는 페이지에 들어가게 되며, 각 페이지는 MySQL 기준 16kbyte이다. (페이지 = 노드)

페이지의 용량을 넘게 되면 B-트리의 분할을 수행한다.


3. 보조 인덱스

  • 테이블 당 여러개 생성 가능
  • 실제 데이터를 가르키는 인덱스 페이지 생성
  • 데이터 자체가 정렬되지 않고, 인덱스 페이지만 정렬됨

출처: https://kosaf04pyh.tistory.com/293


4. 클러스터형 인덱스 VS 보조 인덱스

  • 데이터 검색은 클러스터형 인덱스가 더 빠르다.
    • 클러스터형 인덱스: 루트페이지 -> 리프페이지 (2번의 페이지 참조)
    • 보조 인덱스: 루트페이지 -> 리프페이지 -> 데이터페이지 (3번의 페이지 참조)
  • 데이터 삽입, 수정, 삭제는 보조 인덱스가 더 빠르다.
    • 클러스터형 인덱스: 실제 데이터를 정렬하므로 시간이 오래 걸림
    • 보조 인덱스: 인덱스 페이지만 정렬하므로 더 빠름

 

'데이터베이스' 카테고리의 다른 글

옵티마이저  (0) 2023.11.05
Lock과 MVCC  (0) 2023.11.05
트랜잭션  (0) 2023.10.29
이상과 정규화  (0) 2023.10.27
DBMS와 RDB의 키  (0) 2023.10.19