SQL 기초집LESSON 20
INDEX와 EXPLAIN: 조회 성능 기초
난이도입문 → 초급
예상 시간30분
선수지식이전 강의
20강. INDEX와 EXPLAIN: 조회 성능 기초
1. 이번 강의에서 해결할 문제
데이터가 늘면 기간과 플레이어 조건 조회가 전체 테이블을 훑을 수 있습니다. 감으로 인덱스를 추가하지 않고 실제 쿼리 계획을 비교합니다.
2. 학습 목표
3. 핵심 개념
인덱스는 별도 구조를 저장해 일부 조회를 빠르게 하지만 INSERT, UPDATE, DELETE와 저장 공간 비용을 늘립니다. SQLite 계획의 SCAN은 넓은 순회, SEARCH는 조건을 이용한 부분 탐색을 나타냅니다. 출력 형식은 버전 간 바뀔 수 있어 애플리케이션이 파싱하면 안 됩니다.
4. 단계별 SQL 예시
대상 테이블: games, match_results; 인덱스 추가
파일 경로: C:\dev\game-ranking-db\sql\20-index.sql
sql/20-index.sql
-- 1. 인덱스 전 계획 기록
EXPLAIN QUERY PLAN
SELECT game_id, mode, started_at
FROM games
WHERE started_at >= '2026-07-01T00:00:00Z'
AND started_at < '2026-08-01T00:00:00Z'
ORDER BY started_at DESC;
-- 2. 실제 필터·정렬에 맞는 인덱스 추가
CREATE INDEX IF NOT EXISTS idx_games_started_at
ON games (started_at DESC);
CREATE INDEX IF NOT EXISTS idx_match_results_player_game
ON match_results (player_id, game_id);
-- 3. 같은 쿼리 계획 재확인
EXPLAIN QUERY PLAN
SELECT game_id, mode, started_at
FROM games
WHERE started_at >= '2026-07-01T00:00:00Z'
AND started_at < '2026-08-01T00:00:00Z'
ORDER BY started_at DESC;
PowerShell · 실행 순서
sqlite3 -header -box .\data\game_ranking.db ".read .\sql\20-index.sql"
sqlite3 .\data\game_ranking.db "PRAGMA index_list('games');"
5. 쿼리가 동작하는 이유
started_at 인덱스는 범위 조건과 정렬 순서에 맞는 키를 제공합니다. 복합 인덱스는 왼쪽부터 활용되므로 player_id 조건 뒤 game_id 접근에 유리합니다. 계획에서 SEARCH와 사용 인덱스 이름을 비교합니다.
6. 자주 하는 실수와 안전한 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
MINI QUIZ
0 / 2INDEX와 EXPLAIN: 조회 성능 기초 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
LESSON STATUS
20강. INDEX와 EXPLAIN: 조회 성능 기초 미완료 상태학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.