25분
인덱스: 책의 목차 같은 것
Day 4: 쿼리가 왜 이렇게 느려?
인덱스: 책의 목차 같은 것
SQL 고급 - 윈도우 함수와 성능 최적화 > 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 BY | ORDER BY created_at | 좋음 |
| 범위 검색 | WHERE date >= '2024-01-01' | 좋음 |
인덱스가 안 쓰이는 경우
에디터 로딩 중...
복합 인덱스 순서
에디터 로딩 중...
"왼쪽부터" 순서대로 사용됨!
에디터 로딩 중...
규칙: 자주 쓰는 컬럼 → 앞에, 선택성 높은(고유 값 많은) 컬럼 → 앞에
인덱스의 대가
| 장점 | 단점 |
|---|---|
| SELECT 빨라짐 | INSERT/UPDATE/DELETE 느려짐 |
| 정렬 빨라짐 | 저장 공간 추가 필요 |
| 인덱스 유지 비용 |
무조건 많이 만들면 안 된다! 자주 검색하는 컬럼에만 선별적으로.