정보처리기사/데이터베이스 활용

인덱스(Index)

glorypang 2025. 10. 4. 00:58
728x90
반응형
SMALL

1) 인덱스란?

  • 테이블을 전부 훑지 않고(Full Scan 회피), 조건/정렬/조인을 빠르게 하기 위한 보조 구조.
    • 핵심 아이디어: 키(key) → 레코드 위치 매핑을 `정렬된/조직된 구조에 저장.
  • 구조를 정의하므로 CREATE/DROP 을 사용

2) 주요 유형

(1) B+Tree 인덱스 (가장 일반적)

  • 정렬된 트리. 범위 조회, 정렬, ORDER BY, BETWEEN, >, <, LIKE 'abc%'에 강함.
  • 대부분 RDB의 기본(Oracle, MySQL/InnoDB, PostgreSQL 등).

(2) 해시(Hash) 인덱스

  • 동등 비교(=) 전용으로 매우 빠름. 범위/정렬에는 부적합.
  • 엔진별 지원/제약 상이(예: MySQL Memory/Hash, PostgreSQL hash index 등).

(3) 비트맵(Bitmap) 인덱스

  • 저카디널리티(값 종류가 적은) 컬럼에 강함(예: 성별, 상태코드).
  • DW/OLAP에서 유리. 트랜잭션 쓰기 많은 OLTP엔 비추천(락 범위 큼).

(4) 클러스터드 / 넌클러스터드

  • 클러스터드(Clustered): 테이블 물리 순서 = 인덱스 순서(InnoDB의 PK가 이에 해당). 한 테이블 하나만.
  • 넌클러스터드(Nonclustered): 별도 보조 구조. 여러 개 만들 수 있음.

(5) 유니크/복합/커버링/부분/함수 인덱스

  • UNIQUE: 키 중복 금지(무결성 + 탐색 빠름).
  • 복합(Composite): (col1, col2, …). 왼쪽 접두사(Leftmost) 규칙 중요.
  • 커버링(Covering): 쿼리에 필요한 컬럼이 전부 인덱스에 존재 → 테이블 접근 없이 Index-Only Scan.
    • (SQL Server/PG) INCLUDE (col3, col4) 로 비키 컬럼 포함 가능.
  • 부분/필터드(Partial/Filtered): 조건 만족 행만 인덱싱 → 크기↓, 효율↑
    • (PG) CREATE INDEX ... ON t(col) WHERE status='ACTIVE';
  • 함수/표현식(Functional/Expression): LOWER(name), date_trunc(...) 등 표현식 기반 인덱스.

(6) 전문(Full-Text) / 공간(Spatial) / 특수

  • Full-Text: 텍스트 검색(토큰/랭킹).
  • GIN/GiST(PostgreSQL): 배열 포함, JSONB 키, 근접/공간 질의 등.

3) 언제 효과적인가? (SARGABLE 조건)

  • =, >, <, BETWEEN, IN, LIKE 'abc%' (접두사)
  • 조인 키, 정렬/그룹 키(정렬 스킵/Using Index 가능)
  • 선택도(Selectivity) 높은 컬럼(값 분포가 넓은 컬럼)

비효율 케이스: WHERE func(col)=..., LIKE '%abc', 형변환 후 비교, 널리 쓰이는 저카디널리티 컬럼(=값이 몇 개 안 됨)


4) 성능과 부작용

  • 읽기 성능↑ vs 쓰기 비용↑: 인덱스가 많을수록 DML(INSERT/UPDATE/DELETE) 느려짐.
  • 공간 사용: 인덱스도 디스크/메모리 차지.
  • 통계/분포: 옵티마이저는 히스토그램/통계로 계획 결정 → ANALYZE/UPDATE STATISTICS 중요.
  • 프래그멘테이션: 대량 변경 후 리빌드/리오가나이즈 고려(엔진별).
  • MVCC(예: PostgreSQL): 인덱스/테이블 블로트 발생 → VACUUM(autovacuum) 필수.

5) 예시

<student> 테이블의 name 속성을 오름차순하여 idx_name를 인덱스명으로 하는 인덱스를 생성

CREATE INDEX // index 만들기
idx_name // 인덱스명
ON student // 기준 테이블
(name asc) // 조건 설정

CREATE INDEX idx_name ON student(name asc)
728x90
반응형
LIST