인덱스

haaaalin·2023년 4월 25일
0

인덱스란?
데이터를 빠르게 찾을 수 있도록 도와주는 도구

인덱스 사용 시 주의할 점

  • 필요 없는 인덱스 사용 시, 데이터베이스가 차지하는 공간만 더 늘어나고, 작업이 더 느려질 수 있다.
  • SELECT가 아닌 데이터의 변경 작업이 자주 일어나면 오히려 성능이 나빠질 수 있다.

인덱스의 종류

클러스터형 인덱스

  • 영어사전처럼 책의 내용이 이미 알파벳 순서대로 정렬되어 있는 것
  • 기본 키로 지정하면, 자동으로 클러스터형 인덱스가 생성
  • 기본 키는 테이블에 하나만 지정할 수 있으므로 저절로 클러스터형 인덱스도 테이블에 한 개만 만들 수 있다

보조 인덱스

  • 찾아보기가 별도로 있고, 찾아보기에서 해당 단어를 찾은 후에, 옆에 표시된 페이지를 펼쳐야 실제 찾는 내용이 있는 것
  • 보조 인덱스는 UNIQUE(고유 키)로 지정하면 자동으로 생성
  • 테이블당 여러 개 만들 수 있다

고유 보조 인덱스: 중복 허용 X
단순 보조 인덱스: 중복 허용 O

👀 기본 키 변경 시 주의할점
대용량의 데이터가 있는 상태에서 기본 키 변경시 시간이 엄청 오래 걸리고, 기본 키는 중복되지 않아야 하기 떄문에 굉장히 위험


인덱스 작동 원리

📄 페이지란?
MySQL의 최소한의 저장 단위, 16Kbyte크기
데이터를 1건만 입력해도 1개의 페이지가 필요하다

페이지 분할

인덱스를 구성하면, 데이터 변경 작업 시 성능이 나빠진다고 했던 이유이다.

인덱스는 아래와 같이 균형 트리로 구성되어 있다.
현재 III라는 데이터가 새로 삽입되어 HHH와 JJJ 사이에 삽입된 형태이다.

만약, 이 상태에서 GGG를 입력하게 된다면?
"FFF", "HHH", "III", "JJJ"가 있는 페이지에 빈 공간이 없어, 페이지 분할 작업이 노란 박스 안처럼 실행된다.
이처럼 삽입이 이뤄질 경우, 페이지 분할도 일어날 뿐더러, 새로운 페이지가 할당될 경우도 발생하게 되어 성능이 나빠질 수도 있다.

실제 인덱스 구조

클러스터형 인덱스 구조

보조 인덱스 구조

profile
한 걸음 한 걸음 쌓아가자😎

0개의 댓글