인덱스 Index

sua_ahn·2023년 10월 26일
0

인덱스 Index

: 어떤 데이터가 HDD의 어디에 있는지 위치 정보를 가진 주소록, 자료구조, 데이터베이스 객체

장점

  • 빠른 검색 (데이터가 너무 적지 않은 경우, full table scan에 비해)

단점

  • db 크기의 약 10%의 저장공간 필요
  • 재정렬에 의한 수정삭제 속도 저하

 

구조 (알고리즘, 타입)

B-Tree (Balanced Tree)

Root 페이지(Block) ㄱ
Branch 페이지	  -- 자식페이지의 정보 (대표id, 주소)
Leaf 페이지		  -- 클러스터링: 실제 데이터
		    		 논클러스터: KEY컬럼 + 주소(ROWID) or pk

페이지
: 데이터가 저장되는 단위 = MySQL 16Kbyte

페이지 분할
: 추가할 공간이 없어서, 빈 페이지에 공평하게 나누어 저장

인덱스 사용 시 DML

  • DELETE
    사용안함 표시 → 페이지 낭비, 인덱스 조각화
  • UPDATE
    사용안함 표시 후 삽입

인덱스 조각화(Index Split)
: 데이터 페이지가 물리적으로 분산되어 저장되는 현상
→ 여러 디스크 I/O 작업으로 성능 저하 초래 & 인덱스 페이지 내 빈 공간으로 조회 시간 증가
→ 인덱스 리빌드 작업 필요

 

종류

클러스터형

→ 사전의 인덱스 → 실제 데이터와 무리를 이룸

특징

  • 실데이터가 정렬됨
  • 테이블당 하나

생성방법

1) PK
2) UNIQUE + NOT NULL

논클러스터형 (보조)

→ 책 뒤 찾아보기

특징

  • 별도 인덱스 페이지 필요
  • 보조인덱스로만 이루어져있을 경우, 수정삭제 시 주소변경 필요

생성방법

1) UNIQUE
2) INDEX
3) UNIQUE INDEX

결합 인덱스(Composite Index)
: 두 개 이상의 컬럼을 합쳐서 인덱스를 만드는 것

카디널리티 Cardinality
: 그룹 내 요소의 개수
→ 카디널리티가 높은 (=중복도가 낮은) 컬럼에 인덱스 적용

인덱스 적용 기준

1) 카디널리티가 높은 (=중복도가 낮은) 컬럼
2) Where, Join, Order 에 자주 사용되는 컬럼
3) 수정삭제가 자주 발생하지 않는 컬럼
4) 규모가 큰 테이블

profile
해보자구

0개의 댓글