C.W.K.
Stream
Lesson 01 of 10 · published

인덱스가 뭔데

~12 min · indexes, concepts

Level 0스키마 새싹
0 XP0/86 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

책의 색인 — 같은 아이디어

인덱스는 DB 의 책 뒤 색인. 600 페이지 책의 색인에서 'transactions' 찾기는 한 눈; 그 단어 찾으려 모든 페이지 읽기는 몇 시간. PostgreSQL 인덱스도 똑같음: 테이블 행 가리키는 별도 정렬 구조 — O(N) 스캔을 O(log N) lookup 으로.

Trade-off

인덱스 공짜 아님. 모든 INSERT, UPDATE, DELETE 가 테이블 모든 인덱스 갱신. 인덱스도 디스크 공간 — 가끔 테이블 자체보다 큼. 적정 인덱스 수 = 실제 중요한 쿼리 지원하는 최소 집합. '혹시 모르니' 인덱스 추가가 정확히 스키마 부패하는 방법.

자동 인덱스되는 거

PostgreSQL 이 자동 인덱스 생성: PRIMARY KEY, UNIQUE 제약. FK 는 자동 인덱스 안 됨 — 가장 흔한 성능 함정 중 하나. FK 항상 인덱스.

Code

생성, 목록, 삭제·sql
CREATE INDEX users_email_idx ON users (email);

-- 테이블의 인덱스 보기
SELECT indexname, indexdef
FROM   pg_indexes
WHERE  tablename = 'users';

DROP INDEX users_email_idx;
Planner 가 인덱스 고르는 거 보기·sql
EXPLAIN (ANALYZE, BUFFERS)
SELECT * FROM users WHERE email = 'alice@example.com';
-- 찾을 거: Index Scan / Index Only Scan / Bitmap Heap Scan.
-- 큰 인덱스 컬럼에 'Seq Scan' = planner 가 인덱스 스킵
-- (보통 selectivity 낮거나, 타입 불일치, stale 통계).

External links

Exercise

제어 가능한 테이블에서 비-인덱스 컬럼에 WHERE 필터 쿼리. EXPLAIN ANALYZE; Seq Scan 적기. 그 컬럼에 인덱스 추가; 재실행; Index Scan 으로 plan 변하는 거 + 타이밍 개선 관찰.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.