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

Covering 인덱스 (INCLUDE)

~12 min · indexes, covering

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

Index-only scan

쿼리 필요한 모든 컬럼이 인덱스에 있으면, PostgreSQL 이 테이블 안 건드리고 답 가능 — index-only scan. 가능한 가장 빠른 plan: I/O 절반, 훨씬 좋은 캐시 동작.

INCLUDE 절

CREATE INDEX ... ON t (a) INCLUDE (b, c)a 키 + b/c 옆에 저장 (키 일부 아님, 그냥 같이 감) 인덱스 생성. a 필터 + b/c 선택 쿼리가 키에 추가 컬럼 부풀리지 않고 index-only scan.

VACUUM 과 visibility map

Index-only scan 은 PostgreSQL 이 반환할 모든 행 visible 하다는 거 알아야 — visibility map 으로 관리. 무거운 update 후 VACUUM 실행 (또는 autovacuum 신뢰) 으로 visibility map 최신 유지; 안 그러면 planner 가 heap 체크로 fallback.

Code

INCLUDE 로 covering 인덱스·sql
CREATE INDEX orders_customer_idx
ON orders (customer_id) INCLUDE (placed_at, total);

-- Index-only scan 가능: 모든 선택 컬럼이 인덱스에
EXPLAIN (ANALYZE, BUFFERS)
SELECT customer_id, placed_at, total
FROM   orders
WHERE  customer_id = 7;
-- 찾기: 'Index Only Scan' 와 'Heap Fetches: 0'.
INCLUDE 없이 — composite 로 같은 효과·sql
-- 기능적으론 비슷, 그러나 키 더 넓고 unique semantics 다름
CREATE INDEX orders_cust_placed_total_idx
ON orders (customer_id, placed_at, total);

External links

Exercise

3-4 컬럼 선택 + 한 컬럼 필터 쿼리 잡기. INCLUDE 로 covering 인덱스 추가. EXPLAIN 이 'Index Only Scan' 와 'Heap Fetches: 0' 보이는 거 확인 (필요하면 먼저 테이블에 VACUUM).

Progress

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

댓글 0

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

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