본문으로 건너뛰기
데이터베이스 기초집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
  1. 문제 1“인덱스의 원리와 적용 기준” 코드 리뷰에서 유지해야 할 설계 원칙은 무엇인가요?
  2. 문제 2“인덱스의 원리와 적용 기준”의 작업 기준으로 ‘운영 대형 테이블에 일반 CREATE INDEX’을 진단하거나 바로잡은 선택은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

10강. 인덱스의 원리와 적용 기준 미완료 상태