CS 기본/DB

인덱스

LTSGOD 2023. 10. 3. 21:29

본 포스팅은 '면접을 위한 CS 전공지식 노트'를 기반으로 작성되었습니다.

 

인덱스의 필요성

  • 데이터를 빠르게 찾을 수 있는 하나의 장치
  • 클러스터 인덱스와 논 클러스터 인덱스가 존재

clustering index

  • 실제 데이터 자체가 정렬
  • 리프 페이지 == 데이터 페이지
  • 실제 사전의 정렬 생각

non-clustering index

  • 실제 데이터 페이지는 그대로 존재
  • 별도의 인덱스 페이지 생성 후 그 곳에 실제 데이터의 주소가 들어감.
  • 책 뒷편의 인덱스 페이지 생각(실제 책은 그 순서대로 정렬되어 있지 않는다.)
  • 만약 한 테이블에서 클러스터링 논클러스터링이 동시에 만들어진다면??
    • 논 클러스터링 인덱스의 실제 데이터의 주소가 들어가는 것이 아닌 클러스터링 인덱스의 key값이 들어감
    • why?? -> 실제 주소로 하면 데이터가 정렬될 때마다 논 클러스터링 인덱스의 주소 값을 수정해줘야함.
    • 따라서 클러스터링 인덱스의 값을 넣어줌.

B-트리(Balanced Tree)

  • 리프노드까지의 깊이가 같다.
  • 이진 탐색 트리의 경우 최악 O(n)의 시간 복잡도를 가지기 때문에 균형을 맞춰주어 O(logn)의 탐색속도를 맞춰준다.

 

인덱스 생성 방법

clustering index

  • primary key 생성 시
  • unique + not null 지정 시
  • 테이블 당 한 개 생성 가능
  • 동시에 생성시 primary key 우선 순위

non-clustering 인덱스

ALTER TABLE member
ADD CONSTRAINT unq_name UNIQUE (name);

CREATE UNIQUE INDEX unq_idx_name
ON member(name);

CREATE INDEX idx_name
ON member (name);
  • 테이블 당 여러개 존재 가능
  • unique 제약조건 적용시 자동 생성
  • 직접 index 생성시 

인덱스 선정 기준

  • 카디널리티: 그룹 내 요소의 갯수
  • 카디널리티가 높은 것 ( 중복이 없는 것)

 

참고

https://youtu.be/edpYzFgHbqs?si=djzCqq5O4zE03UNG