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

Unique 와 Partial 인덱스

~12 min · indexes, unique, partial

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

UNIQUE 인덱스가 위장한 제약

UNIQUE 제약이 unique 인덱스로 구현. CREATE UNIQUE INDEX 로 직접 생성 가능 — 기존 컬럼에 unique 추가 또는 partial WHERE 로 unique 범위 한정에 유용.

Partial 인덱스 — 쿼리하는 것만 인덱스

Partial 인덱스가 WHERE 절 포함: predicate 매치 행만 인덱스. 더 작은 인덱스, 유지보수 빠름, 같은 predicate 매치 쿼리에 종종 극적으로 빠름. 고전: 활성 행만, pending 주문만, 비-삭제 레코드만 인덱스.

Partial + unique 결합

"비-삭제 유저 중 email unique" 가 partial unique 인덱스 — 앱에서 강제하기 짜증나는 문제의 한 줄 해법.

Code

Unique 인덱스·sql
-- UNIQUE 제약과 동등
CREATE UNIQUE INDEX users_email_uniq ON users (email);

-- 다중 컬럼 unique
CREATE UNIQUE INDEX user_product_review ON reviews (user_id, product_id);

-- Partial unique: 비-삭제 유저 중 email unique
CREATE UNIQUE INDEX users_active_email_uniq
ON users (email)
WHERE deleted_at IS NULL;
Hot 쿼리 위한 partial 인덱스·sql
-- pending 주문의 작은 부분집합만 인덱스
CREATE INDEX orders_pending_idx
ON orders (placed_at DESC)
WHERE status = 'pending';

-- predicate 매치 쿼리가 partial 인덱스 사용
EXPLAIN ANALYZE
SELECT * FROM orders
WHERE  status = 'pending'
ORDER  BY placed_at DESC
LIMIT  20;
-- 작은 인덱스, 매우 빠른 스캔, status 필터 불필요.

External links

Exercise

'대부분 행이 X 인데 Y 인 소수만 쿼리' 컬럼 찾기 (status, deleted_at, archived flag). 드문 케이스에 partial 인덱스 추가; EXPLAIN 전후 비교.

Progress

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

댓글 0

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

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