Database/Mysql

[Real MySQL] 8-1. 인덱스

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
  • 중복된 값을 허용하지 않도록 강제하는 인덱스
  • Null 값 허용

 

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

 

문제점

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

 

생성 시, 많은 시간 소요
  • CPU & Disk I/O 리소스를 많이 사용함
  • 읽기 (인덱싱할 컬럼의 모든 데이터) - 정렬 - 저장

 

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