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

CREATE INDEX — Single, Composite, Unique

~12 min · indexes, create-index, composite

Level 0Scout
0 XP0/80 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

인덱스 모양 3 가지

  • Single-columnCREATE INDEX i ON t(col). 자주 걸러내는 컬럼에 붙여.
  • CompositeCREATE INDEX i ON t(a, b). 순서가 전부야. a만으로 거르거나 ab를 같이 걸면 도움이 되는데, b만으로는 못 써. 인덱스 항목이 (a, b) 순으로 줄 서 있다고 생각하면 돼. a로 이분 탐색하고, 그 안에서 b로 다시 좁히는 거야.
  • UniqueCREATE UNIQUE INDEX i ON t(col). 인덱스에 중복 금지 제약이 얹혀. 컬럼에 UNIQUE를 선언하면 SQLite가 이걸 알아서 만들어.
Tip: Composite 인덱스의 컬럼 순서를 정할 때는 값이 가장 다양한 컬럼, 그러니까 selectivity가 높은 컬럼을 앞에 둬. 다만 가장 자주 도는 query가 덜 촘촘한 컬럼으로 먼저 거르는 모양이라면 그쪽을 앞에 두는 게 맞아.

Code

3 가지 인덱스 종류·sql
-- Single-column
CREATE INDEX idx_msg_conv ON messages(conversation_id);

-- Composite — 순서 중요
CREATE INDEX idx_msg_conv_created ON messages(conversation_id, created_at DESC);

-- Unique
CREATE UNIQUE INDEX idx_users_email ON users(email);
인덱스 검사·sql
-- 테이블의 모든 인덱스
SELECT name, sql FROM sqlite_schema
WHERE type = 'index' AND tbl_name = 'messages';

-- 또는 PRAGMA
SELECT * FROM pragma_index_list('messages');
SELECT * FROM pragma_index_info('idx_msg_conv_created');

External links

Exercise

messages 테이블에 컬럼 순서가 다른 composite 인덱스를 셋 만들어봐. (conversation_id, created_at), (created_at, conversation_id), (brain, conversation_id). 그리고 query를 셋 던져. conversation_id만 걸기, conversation_id와 created_at 같이 걸기, created_at만 걸기. EXPLAIN QUERY PLAN으로 어느 query가 어느 인덱스를 집는지 확인하고, 순서가 어디서 함정이 됐는지 적어둬.

Progress

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

댓글 0

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

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