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

Composite 인덱스

~12 min · indexes, composite

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

인덱스 한 개, 컬럼 여러 개

Composite (다중 컬럼) 인덱스가 키 연결된 단일 B-tree. CREATE INDEX ... ON orders (customer_id, placed_at DESC) 가 customer_id 먼저, 그 다음 각 customer 안에서 placed_at 정렬. 이게 'Alice 의 가장 최근 5 주문' 을 즉시로 만드는 거.

컬럼 순서 중요

(a, b, c) composite 인덱스가 다음 필터 쿼리 지원:

  • a 단독
  • a + b
  • a + b + c

지원 못함: b 단독 또는 c 단독 — 자체 인덱스 필요. 선행 컬럼이 게이트키퍼.

고전 모양: 동등 먼저, 범위 나중

WHERE customer_id = 7 AND placed_at >= '2026-04-01' 에 최적 composite 가 (customer_id, placed_at) — 동등 먼저, 범위 나중. 뒤집으면 planner 가 두 컬럼으로 범위 좁히기 못 함.

Code

Composite 인덱스·sql
-- 지원: WHERE customer_id = ?  /  WHERE customer_id = ? AND placed_at > ?
-- 잘 지원 못함: WHERE placed_at > ? 단독
CREATE INDEX orders_customer_placed_idx ON orders (customer_id, placed_at DESC);

-- ORDER BY 가 공짜로 따라옴
SELECT id, total FROM orders
WHERE  customer_id = 7
ORDER  BY placed_at DESC
LIMIT  5;
-- orders_customer_placed_idx 의 Index Scan — 별도 sort step 없음.
두 단일 컬럼 인덱스로 인덱스 교차·sql
-- 가끔 두 단일 컬럼 인덱스로 충분; planner 가 Bitmap And 로 결합.
-- 완벽한 composite 보다 느리지만 더 유연.
CREATE INDEX orders_customer_idx ON orders (customer_id);
CREATE INDEX orders_status_idx   ON orders (status);

EXPLAIN ANALYZE
SELECT * FROM orders WHERE customer_id = 7 AND status = 'paid';
-- Plan: orders 에 Bitmap Heap Scan + 두 인덱스의 BitmapAnd.

External links

Exercise

두 컬럼 필터 쿼리 잡기. 각 컬럼 순서로 composite 인덱스 시도; EXPLAIN 비교. 두 단일 컬럼 인덱스 시도; 다시 비교. Planner 가 어느 거 선호하고 왜인지 결정.

Progress

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

댓글 0

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

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