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

정렬된 나무를 따라 범위를 좁힌다

CREATE INDEX가 기본으로 만드는 B-tree는 정렬된 키를 여러 단계로 좁혀 찾아가. =, <, >, BETWEEN, 접두사 LIKE 'foo%'에 강해.

동등·범위·정렬을 한 구조로

WHERE email = 'x', WHERE created_at BETWEEN '2026-01-01' AND '2026-04-30', WHERE name LIKE 'A%', ORDER BY created_at DESC가 대표적인 쓰임이야. 역순 색인 DESC도 필요에 따라 만들 수 있어.

앞쪽 와일드카드는 길을 잃게 해

'%A', '%foo', '%foo%'처럼 시작 문자를 모르면 보통 B-tree의 정렬을 활용하지 못해. 접미사·부분 문자열에는 pg_trgm이나 GIN을, JSONB 포함·전문 검색에는 GIN을, 배열·공간 연산에는 GIN이나 GiST를 검토해.

Code

B-tree의 여러 형태·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 질의의 계획이 어떻게 달라지는지 확인해.

Progress

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

댓글 0

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

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