데이터베이스 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 35
후created_at
)
결론
- 복합 인덱스 설계 시
WHERE
,ORDER BY
,GROUP BY
조건의 순서와 컬럼 조합을 고려 LIKE '%pattern'
은 B-Tree 인덱스 활용 불가,LIKE 'pattern%'
은 효과적- "인덱스가 많을수록 좋다"는 오해는 성능 저하로 이어질 수 있음