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

B-tree: 기본 일꾼

~12 min · indexes, btree

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

이유 있는 default

타입 명시 없이 CREATE INDEX 쓰면 PostgreSQL 이 B-tree. B-tree 가 정렬, 균형, 동등 (=), 범위 (<, >, BETWEEN), prefix 매칭 (LIKE 'foo%'), ORDER BY 지원. 인덱스 컬럼 대다수에 정답.

B-tree 잘 하는 거

  • 동등: WHERE email = 'x'
  • 범위: WHERE created_at BETWEEN '2026-01-01' AND '2026-04-30'
  • Prefix LIKE: WHERE name LIKE 'A%' ('%A' 아님)
  • 정렬: ORDER BY created_at DESC 가 B-tree 직접 사용 가능

B-tree 못 도와주는 거

  • Suffix 또는 substring LIKE ('%foo', '%foo%') — pg_trgm/GIN 필요.
  • JSONB containment, full-text search — GIN 필요.
  • Array 연산자, geospatial — GIN/GiST 필요.

Code

B-tree variant·sql
-- Plain B-tree (default)
CREATE INDEX orders_placed_at_idx ON orders (placed_at);

-- 내림차순 박힘 (ORDER BY ... DESC 쿼리에 매치)
CREATE INDEX orders_placed_at_desc_idx ON orders (placed_at DESC);

-- 다중 컬럼 (composite) — 다음 레슨
CREATE INDEX orders_customer_placed_idx ON orders (customer_id, placed_at DESC);

-- B-tree 명시 (거의 불필요)
CREATE INDEX orders_total_idx ON orders USING btree (total);
인덱스 쓰는 범위 쿼리·sql
EXPLAIN ANALYZE
SELECT id, total FROM orders
WHERE placed_at BETWEEN '2026-04-01' AND '2026-04-30'
ORDER BY placed_at DESC;
-- 예상: orders_placed_at_desc_idx 의 Index Scan / Index Only Scan.

External links

Exercise

범위 쿼리하는 컬럼에 B-tree 인덱스 추가. EXPLAIN ANALYZE 로 전후 범위 쿼리. 컬럼을 DESC 순서로 추가해서 반복; ORDER BY DESC 쿼리 plan 비교.

Progress

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

댓글 0

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

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