1과목 · 데이터 모델링의 이해·9장
본질·인조 식별자와 인덱스 기초
식별자 전략 복습, 인덱스의 역할과 대표 유형, 설계 원칙을 정리합니다.
1. 본질 vs 인조 식별자 — 실무 기준
| 구분 | 설명 |
|---|---|
| 본질 | 업무에 존재하는 키 (사업자번호, 이메일) |
| 인조 | 시스템 부여 순번/UUID |
인조 식별자가 사실상 표준인 이유: 짧음·불변·의미없음·생성 빠름.
2. 인덱스란
특정 컬럼(들)의 빠른 탐색을 가능하게 하는 보조 자료구조. 책의 색인처럼 원본 데이터는 그대로 두고 정렬된 참조를 미리 유지.
유용한 순간
- WHERE 필터
- JOIN ON
- ORDER BY / GROUP BY
- 선택도(Selectivity)가 높은 컬럼
비용
- 저장 공간
- DML 시 인덱스 갱신
- 잘못 만든 인덱스는 옵티마이저 혼란
3. 인덱스 유형
B-Tree (기본)
정렬된 키를 균형 트리로 유지. 범위·정렬 모두 효율적.
CREATE INDEX idx_emp_dept ON emp(dept_id);
CREATE INDEX idx_ord_cov ON orders(customer_id, ordered_at DESC);
Bitmap
카디널리티 낮은 컬럼(성별, 상태)에 유리. DW에서 사용.
Hash
= 비교에 강함. 범위에는 약함.
함수 기반
표현식 결과에 인덱스.
CREATE INDEX idx_lower_email ON emp(LOWER(email));
4. 복합 인덱스와 선두 컬럼
(A, B, C)는 "A만" 또는 "A, B"엔 쓰이지만 "B만" 또는 "C만"엔 제한적. Left-most Prefix 규칙.
5. 커버링 인덱스
쿼리 필요 컬럼이 모두 인덱스에 있으면 테이블 읽지 않고 응답.
CREATE INDEX idx_cov ON orders(customer_id, ordered_at) INCLUDE (amount);
6. 설계 원칙
- WHERE/JOIN/ORDER BY 컬럼 우선.
- 카디널리티 낮으면 Bitmap/부분 인덱스.
- 자주 바뀌는 컬럼엔 최소화.
- 복합 인덱스는 선택성 높은 순서.
- 불필요한 인덱스는 삭제.
7. 자주 출제되는 포인트
- 인조 식별자 권장 이유.
- 인덱스 비용: 공간 + DML.
- B-Tree vs Bitmap은 카디널리티가 키.
- 선두 컬럼 규칙.
- 함수 기반 인덱스가 필요한 표현식 WHERE.
8. 요약 체크리스트
- 본질·인조 식별자를 비교한다.
- 인덱스 득·실을 구분한다.
- B-Tree와 Bitmap 적합 상황을 안다.
- 복합 인덱스 선두 컬럼 규칙을 설명한다.