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