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

Covering Index

~12 min · indexes, covering, performance

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

Query 가 테이블 안 만짐

Covering index 가 query 필요한 모든 컬럼 — WHERE 절과 SELECT list — 다 포함. SQLite 가 main 테이블 안 만지고 인덱스 B-tree 만으로 query 만족. EXPLAIN QUERY PLAN 이 USING COVERING INDEX 로 보고.

Query 'cover' 두 방법:

  • SELECT 컬럼을 composite 인덱스의 필터링 컬럼 뒤에 추가.
  • SQLite 의 인덱스 표현식으로 자주 SELECT 하는 derived 값 project.
Warning: 넓은 인덱스가 write overhead + 디스크 더 비용. Covering 은 정밀 도구, 기본 아님. 알려진 hot query 에 적용, 모든 query 에 X.

Code

Plain vs covering·sql
-- Plain — 인덱스가 WHERE 도움, SELECT 는 테이블 읽음
CREATE INDEX idx_msg_conv ON messages(conversation_id);

EXPLAIN QUERY PLAN
SELECT id, role, created_at FROM messages WHERE conversation_id = 1;
-- 0|0|0|SEARCH messages USING INDEX idx_msg_conv (conversation_id=?)

-- Covering — 인덱스가 query 필요한 모든 컬럼 가짐
CREATE INDEX idx_msg_conv_cover
  ON messages(conversation_id, role, created_at, id);

EXPLAIN QUERY PLAN
SELECT id, role, created_at FROM messages WHERE conversation_id = 1;
-- 0|0|0|SEARCH messages USING COVERING INDEX idx_msg_conv_cover ...

External links

Exercise

EXPLAIN 이 SEARCH ... USING INDEX 라고 한 query. SELECT 컬럼 포함하는 covering 인덱스 추가. EXPLAIN 이 USING COVERING INDEX 로 바뀌는지 확인. Row count + size 에서 실제로 시간 차이 났는지 측정.

Progress

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

댓글 0

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

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