Database/Mysql

[Real MySQL] 8-2. 인덱스

noahkim_ 2023. 11. 25. 02:59

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다.

 

1. 인덱스

데이터를 빠르게 찾을 수 있도록 도와주는 자료구조
  • key-value 형식
  • 특정 컬럼값을 정렬하여 보관
    • 저장될 때마다 값이 항상 정렬됨

 

Key

Primary Key
  • 행을 대표하는 컬럼들로 이루어진 인덱스
  • 유일성
  • Not Null
  • "키 값-레코드 주소 값"으로 구성됨

 

Secondary Key
  • Primary Key와는 다른 컬럼 조합으로 생성된 인덱스
    • 더 빠르게 검색하기 위한 기능 (보조적인 역할)
  • 유일성 필수 X
  • Nullable
  • "키 값-PK값"으로 구성됨

 

알고리즘

B-Tree 알고리즘 (기본 알고리즘)
  • 원래의 컬럼 값을 이용해 인덱싱하는 알고리즘 입니다.
  • 균형 이진 트리 구조
  • 범위 검색에 매우 효율적

 

Hash Index 알고리즘
  • 컬럼 값을 해시 계산으로 가공해서 인덱싱하는 알고리즘 입니다.
  • 매우 빠름
  • 정확히 일치하는 검색만 가능 (부분 검색 or 범위 검색 X)
  • 주로 인 메모리 기반의 데이터베이스에서 사용합니다.

 

데이터 중복 여부

Unique Index
  • 중복된 값을 허용하지 않도록 강제하는 인덱스
  • Nullable

 

Non-Unique Index
  • 중복된 값을 허용
  • Not Null

 

단점

대용량 데이터 시, 성능 느려짐
  • 인덱스는 특정 컬럼의 모든 값을 저장
  • 적재된 데이터가 많아질수록, 인덱스 크기도 커지므로 찾는 속도가 느려짐

 

생성 시, 많은 시간 소요
  • 인덱스 생성 시, 모든 데이터를 읽고 정렬한 후 저장해야 하므로 많은 시간이 소요됨
  • 이 과정에서 CPU & Disk I/O 리소스를 많이 사용함

 

데이터 수정 작업이 많으면 성능 저하 가능성 높음
  • 데이터 수정 시, 인덱스도 함께 업데이트 되어야 함
  • 인덱스 유지보수 비용이 증가하여, 데이터베이스 성능이 저하될 수 있음