B-Tree 인덱스 설계 원리: 쿼리 성능 10배 개선
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

데이터베이스 B-Tree를 이해한 날: 인덱스 설계의 핵심 원리

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

데이터 분석

대상자

  • 초보 개발자 및 DB 인덱싱에 관심 있는 중급자
  • 데이터베이스 성능 최적화, 인덱스 설계 원리 이해 필요
  • 난이도: 중급 (B-Tree 구조, 인덱스 설계 패턴 설명 포함)

핵심 요약

  • B-Tree는 디스크 저장을 위한 균형 트리 구조로, 쿼리 성능을 10배 이상 개선
  • 인덱스 컬럼 순서((status, age, created_at))가 복합 인덱스의 효율성 결정
  • 범위 쿼리(BETWEEN, LIKE 'pattern%') 처리 시 B-Tree의 연속적 데이터 저장 구조 활용

섹션별 세부 요약

1. 인덱스 사용의 잘못된 접근

  • "인덱스 추가 = 성능 향상"이라는 잘못된 믿음
  • 단일 컬럼 인덱스(idx_user_email, idx_user_age) 과도한 생성으로 성능 저하
  • 쿼리 패턴 분석 없이 무작정 인덱스 추가 시 오히려 디스크 접근 증가

2. B-Tree의 핵심 원리

  • 균형 트리 구조: 모든 리프 노드 동일 높기로 디스크 접근 최소화
  • 광범위 노드: 1노드에 100개 이상 키 저장 (이진 트리 2개 대비)
  • 연속 데이터 저장: 범위 쿼리 시 디스크 랜덤 접근 방지

3. 인덱스 설계 전후 비교

  • 이전: 단일 컬럼 인덱스 3개 생성 (status, age, created_at) → 3번의 디스크 접근
  • 이후: 복합 인덱스 idx_user_search (status, age, created_at) 생성 → 1번의 디스크 접근
  • 쿼리 성능 10배 향상 (3초 → 300밀리초)

4. B-Tree 기반 최적화 전략

  • 복합 인덱스 컬럼 순서: (a, b, c)(c, b, a)
  • 좌측 접두사 규칙: (a, b, c) 인덱스는 a 또는 (a, b) 쿼리만 지원
  • 범위 조건 이후 컬럼은 인덱스 활용 불가 (예: age BETWEEN 25 AND 35created_at)

결론

  • 복합 인덱스 설계 시 WHERE, ORDER BY, GROUP BY 조건의 순서와 컬럼 조합을 고려
  • LIKE '%pattern'은 B-Tree 인덱스 활용 불가, LIKE 'pattern%'은 효과적
  • "인덱스가 많을수록 좋다"는 오해는 성능 저하로 이어질 수 있음