25

인덱스: 책의 목차 같은 것

Day 4: 쿼리가 왜 이렇게 느려?

학습 목표

인덱스의 개념과 원리를 이해한다 인덱스 생성 문법을 익힌다

인덱스란?

테이블의 특정 컬럼에 대한 "목차"


비유: 책에서 단어 찾기

인덱스 없이 (Seq Scan)

"SQL"이라는 단어를 찾아주세요

1페이지부터 마지막 페이지까지 한 장씩 넘기며 찾기 → 500페이지 책이면 500페이지 다 봐야 함

인덱스 있으면 (Index Scan)

뒤의 "색인"을 보세요

색인에서 "SQL → 42, 156, 289페이지" → 3페이지만 보면 됨


B-Tree 인덱스 (기본)

에디터 로딩 중...

트리 구조로 빠르게 찾기

  • 정렬된 상태 유지
  • 범위 검색에 효율적 (>=, <=, BETWEEN)
  • 대부분의 경우 이걸 사용

인덱스 생성

에디터 로딩 중...

인덱스가 효과적인 경우

상황예시인덱스 효과
WHERE 조건WHERE status = 'active'매우 좋음
JOIN 조건ON a.id = b.a_id매우 좋음
ORDER BYORDER BY created_at좋음
범위 검색WHERE date >= '2024-01-01'좋음

인덱스가 안 쓰이는 경우

에디터 로딩 중...

복합 인덱스 순서

에디터 로딩 중...

"왼쪽부터" 순서대로 사용됨!

에디터 로딩 중...

규칙: 자주 쓰는 컬럼 → 앞에, 선택성 높은(고유 값 많은) 컬럼 → 앞에


인덱스의 대가

장점단점
SELECT 빨라짐INSERT/UPDATE/DELETE 느려짐
정렬 빨라짐저장 공간 추가 필요
인덱스 유지 비용

무조건 많이 만들면 안 된다! 자주 검색하는 컬럼에만 선별적으로.