일반 쿼리를 위한 인덱스
사용자, 날짜, 외래 키를 기준으로 자주 실행할 쿼리에 인덱스를 추가하고 EXPLAIN으로 영향을 측정합니다.
일반 쿼리를 위한 인덱스은(는) CoddyKit의 무료 SQL Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 SQL Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
인덱스란 무엇인가
인덱스는 테이블을 전체 검색하지 않고도 열 값으로 행을 찾을 수 있게 해 주는 별도의 디스크 기반 자료 구조입니다. 대표적인 구현 방식은 B-트리입니다.
인덱스는 쓰기와 읽기를 맞바꿉니다
인덱스가 있으면 INSERT/UPDATE/DELETE가 약간 느려집니다(인덱스도 함께 갱신해야 하기 때문입니다). 필요하지 않은 인덱스는 추가하지 마세요.
기본 키에는 인덱스가 자동으로 생성됨
PRIMARY KEY를 선언하면 고유 B-트리 인덱스가 자동으로 생성됩니다. UNIQUE 열도 마찬가지입니다.
외래 키 열에 인덱스 추가하기
PostgreSQL은 FK의 자식 쪽에 인덱스를 자동으로 만들지 않습니다. 항상 하나를 추가하세요. 인덱스가 없으면 부모를 삭제할 때 모든 자식 행을 검색합니다:
CREATE INDEX comments_post_id_idx ON comments(post_id);
CREATE INDEX comments_author_id_idx ON comments(author_id);WHERE에 사용하는 열에 인덱스 추가하기
created_at으로 자주 필터링한다면 해당 열에 인덱스를 추가하세요:
CREATE INDEX posts_created_at_idx ON posts(created_at DESC);
-- Query benefits:
SELECT * FROM posts ORDER BY created_at DESC LIMIT 20;복합 인덱스
여러 열을 기준으로 필터링할 때는 단일 열 인덱스 두 개보다 복합 인덱스가 훨씬 빠를 수 있습니다:
CREATE INDEX posts_author_published_idx
ON posts(author_id, published_at DESC);
-- This query uses the index for both filter and sort:
SELECT * FROM posts
WHERE author_id = 42
ORDER BY published_at DESC LIMIT 10;왼쪽 접두사 규칙
복합 인덱스 (a, b, c)는 WHERE a = ?와 WHERE a = ? AND b = ?에 사용할 수 있지만, WHERE b = ?만으로는 사용할 수 없습니다. 순서가 중요합니다.
부분 인덱스
조회할 행에만 인덱스를 만드세요:
-- Only published posts:
CREATE INDEX posts_published_idx
ON posts(published_at DESC)
WHERE published_at IS NOT NULL;
-- Smaller index, faster lookups for the common case.표현식 인덱스
열에 함수를 적용한 결과에 인덱스를 만들 수 있습니다:
CREATE INDEX users_email_lower_idx ON users(LOWER(email));
-- Query that uses it:
SELECT * FROM users WHERE LOWER(email) = LOWER($1);인덱스를 과도하게 만들지 않기
일반적인 원칙은 다음과 같습니다:
- PK에 인덱스 추가 ✓ (자동)
- UNIQUE 열에 인덱스 추가 ✓ (자동)
- FK 열에 인덱스 추가 ✓
- 자주 실행하는 쿼리의 WHERE / JOIN / ORDER BY에서 사용하는 열에 인덱스 추가
- 선택도가 매우 낮은 열에는 인덱스를 추가하지 않기(예: 값이 50 대 50으로 나뉘는 불리언)
EXPLAIN으로 측정하기
인덱스를 추가하기 전과 후에 EXPLAIN ANALYZE를 실행하여 실행 계획 수립기가 인덱스를 사용하는지 확인하세요:
EXPLAIN ANALYZE
SELECT * FROM posts WHERE author_id = 42 ORDER BY published_at DESC LIMIT 10;복습
블로그에서는 FK에 인덱스를 추가합니다(post_id는 댓글에, author_id는 게시물과 댓글에). 또한 사용자별 "최신 게시물" 쿼리를 위해 게시물에 (author_id, published_at DESC) 인덱스를 추가합니다.
빠른 확인
외래 키 orders.user_id REFERENCES users(id)를 추가했습니다. 어떤 인덱스를 만들어야 하며, 인덱스가 필요하지 않을 수도 있습니까?
자주 묻는 질문
“일반 쿼리를 위한 인덱스” 강의는 무료인가요?
네 — “일반 쿼리를 위한 인덱스” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 SQL Academy 강의 전체를 잠금 해제할 수 있습니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“일반 쿼리를 위한 인덱스”에서 뭘 배우나요?
사용자, 날짜, 외래 키를 기준으로 자주 실행할 쿼리에 인덱스를 추가하고 EXPLAIN으로 영향을 측정합니다. 브라우저에서 직접 실행하는 실습 코드로 SQL Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
SQL Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 SQL Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“일반 쿼리를 위한 인덱스” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 SQL Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 SQL Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 블로그 모델링: 사용자, 게시물, 댓글
- 키와 형식 선택
- 일반 쿼리를 위한 인덱스
- 테스트 데이터로 데이터베이스 초기화