본문 바로가기
C.W.K.
Stream
Lesson 09 of 10 · published

INCLUDE로 결과 열까지 싣기

~12 min · indexes, covering

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

힙을 다시 찾지 않아도 되는 색인

CREATE INDEX ... ON t (a) INCLUDE (b, c)a로 탐색하면서 결과에 필요한 bc도 색인에 실어. 조건이 맞으면 테이블 본문을 방문하지 않는 색인 전용 스캔이 가능해.

키와 포함 열의 역할은 달라

a는 정렬과 탐색을 맡지만 bc는 결과에 실을 값일 뿐이야. 포함 열로 범위를 좁힐 수는 없어. 필요한 열을 3-4개 무작정 싣기 전에 읽기 이득과 색인 폭을 비교해.

가시성 지도도 조건이야

색인에 값이 모두 있어도 행이 현재 보이는지 확인하려면 힙을 찾을 수 있어. VACUUM이 가시성 지도를 잘 유지해야 진짜 색인 전용 스캔이 늘어. 힙 방문 0인지 실행 계획으로 확인해.

Code

INCLUDE를 쓴 포함 색인·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'.
복합 색인으로 같은 열을 담은 경우·sql
-- 기능적으론 비슷, 그러나 키 더 넓고 unique semantics 다름
CREATE INDEX orders_cust_placed_total_idx
ON orders (customer_id, placed_at, total);

External links

Exercise

열 3~4개를 반환하면서 한 열로 거르는 질의를 골라 INCLUDE를 쓴 포함 색인을 추가해. 필요하면 먼저 VACUUM을 실행하고 EXPLAIN에서 'Index Only Scan'과 'Heap Fetches: 0'이 보이는지 확인해.

Progress

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

댓글 0

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

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