6. DB 인덱스 심화·쿼리 최적화, 실행계획, 복합 인덱스

난이도 중 해설 보기 →
문제

문제 6 — DB 인덱스 심화·쿼리 최적화, 실행계획, 복합 인덱스

면접 질문

  1. B-tree 인덱스가 어떻게 빠른 조회를 가능하게 하는지 자료구조 관점에서 설명하고, 인덱스가 "범위 검색(range scan)"과 "정렬(ORDER BY) 회피"에도 도움을 주는 이유를 말해보세요.

  2. 복합 인덱스(composite/multi-column index)에서 "컬럼 순서가 중요하다"는 말의 의미를 설명하고, WHERE a = ? AND b > ?, WHERE b = ? 같은 쿼리가 인덱스 (a, b)를 탈 수 있는지 각각 판단해보세요. "leftmost prefix" 규칙이란 무엇인가요?

  3. 커버링 인덱스(covering index)란 무엇이며 왜 빠른가요? 실행계획(EXPLAIN)에서 확인해야 할 핵심 지표(예: full scan 여부, 사용된 인덱스, 예상 행 수)는 무엇인가요?

응용 시나리오

길드 랭킹/검색 기능이 있는 게임의 characters 테이블이 있습니다.

characters(
  id BIGINT PK,
  guild_id BIGINT,
  level INT,
  score BIGINT,
  region VARCHAR,
  name VARCHAR,
  last_login DATETIME
)  -- 수천만 행

자주 실행되는 쿼리:

  • (Q1) 특정 길드의 멤버를 점수 내림차순으로 상위 20명: WHERE guild_id = ? ORDER BY score DESC LIMIT 20
  • (Q2) 특정 지역에서 최근 로그인한 활성 유저: WHERE region = ? AND last_login > ?
  • (Q3) 이름으로 부분 검색: WHERE name LIKE ?

(a) Q1을 빠르게 하기 위한 인덱스를 설계하고, 그 인덱스가 정렬과 LIMIT까지 어떻게 최적화하는지 설명해보세요. 단순히 (guild_id)만 인덱스했을 때와 무엇이 다른가요?

(b) Q3의 LIKE '%foo%'(앞에 와일드카드)가 왜 일반 B-tree 인덱스를 못 타는지 설명하고, 대안(전문검색/별도 인덱스 등)을 제시해보세요.

(c) 개발 중에는 빠르던 쿼리가 운영에서 데이터가 쌓이자 갑자기 느려졌습니다. 원인을 진단하기 위해 무엇을(실행계획, 통계, 인덱스 사용 여부) 어떻게 확인할지, 그리고 흔한 원인 한 가지 이상을 설명해보세요.

답안 작성
내 답안 · 자동 저장

직접 답을 작성한 뒤, 위 해설 보기에서 모범답안과 대조하세요.