데이터베이스 기초집LESSON 10
인덱스의 원리와 적용 기준
난이도초급 → 중급
예상 시간35분
선수지식이전 강의
10강. 인덱스의 원리와 적용 기준
1. 이번 강의에서 해결할 문제
느릴 것 같은 모든 열에 인덱스를 추가하면 쓰기·저장 공간·유지 비용만 늘 수 있습니다. 실제 랭킹 API의 필터, 정렬, JOIN 패턴에서 필요한 인덱스 후보를 도출합니다.
2. 학습 목표
3. 핵심 개념
PostgreSQL의 기본 B-tree 인덱스는 정렬된 키와 행 위치를 유지해 전체 테이블 대신 필요한 범위를 찾게 합니다. 복합 인덱스는 왼쪽 열부터 사용할 수 있는 조건이 중요합니다. 낮은 선택도의 단일 boolean 열은 이득이 작지만 활성 행만 담는 부분 인덱스는 효과적일 수 있습니다. 인덱스는 읽기를 돕는 대신 모든 쓰기마다 갱신됩니다.
4. 단계별 예시
파일 경로: C:\dev\game-ranking-service\database\sql\10-indexes.sql
database/sql/10-indexes.sql
-- 플레이어의 최근 경기 목록
CREATE INDEX IF NOT EXISTS ix_results_player_game_desc
ON ranking.match_results (player_id, game_id DESC);
-- 기간별 완료 경기 조회
CREATE INDEX IF NOT EXISTS ix_games_finished_started
ON ranking.games (started_at DESC)
WHERE status = 'finished';
-- FK를 가진 쪽의 삭제·JOIN 검사 지원
CREATE INDEX IF NOT EXISTS ix_results_character
ON ranking.match_results (character_id);
SELECT schemaname, tablename, indexname, indexdef
FROM pg_indexes
WHERE schemaname = 'ranking'
ORDER BY tablename, indexname;
PowerShell · 인덱스 적용
psql -d game_ranking_dev -v ON_ERROR_STOP=1 -f .\database\sql\10-indexes.sql
5. 동작 원리
(player_id, game_id DESC)는 특정 플레이어로 먼저 좁히고 최신 game_id 순으로 읽는 쿼리에 맞습니다. 부분 인덱스는 완료 경기만 저장해 작은 구조를 유지합니다. 단, 플래너가 인덱스보다 순차 스캔이 싸다고 판단하면 인덱스를 사용하지 않을 수 있으며 이는 오류가 아닙니다.
6. 자주 하는 실수와 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
MINI QUIZ
0 / 2인덱스의 원리와 적용 기준 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
LESSON STATUS
10강. 인덱스의 원리와 적용 기준 미완료 상태학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.