본문 바로가기
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

책 뒤의 찾아보기와 같아

색인은 테이블과 별도로 유지되는 탐색 구조야. 색인은 테이블 행을 가리키는 별도 탐색 구조라서, 전체를 훑는 O(N) 작업을 보통 O(log N) 탐색으로 바꿔. 600쪽 책에서 낱말 하나를 찾을 때 매 쪽을 읽는 대신 찾아보기를 펴는 셈이지.

빠른 읽기에는 비용이 붙어

색인은 디스크를 차지하고, INSERT·UPDATE·DELETE 때 함께 고쳐야 하며, 메모리 캐시도 나눠 써. 따라서 “질의가 느리다”는 이유만으로 무작정 더하지 말고 실행 계획에서 실제 병목과 선택도를 확인해야 해.

Code

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

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

DROP INDEX users_email_idx;
계획기가 색인을 고르는 과정 보기·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으로 바뀌는지와 시간이 얼마나 줄었는지 관찰해.

Progress

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

댓글 0

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

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