contents

데이터베이스 인덱스 가이드

1. 인덱스란?

데이터베이스 인덱스란 테이블의 특정 컬럼(들)에 대해 별도의 자료구조를 만들어, 데이터를 빠르게 검색·조회할 수 있게 해주는 도구입니다.
(책의 찾아보기/색인처럼, 원하는 주제를 바로 찾을 수 있는 목차 역할)

2. 인덱스 동작 원리

  1. 인덱스를 생성하면, DBMS가 테이블을 스캔해 인덱스 자료구조(보통 키+포인터) 작성
  2. 쿼리 실행 시 (WHERE user_id=123 등)
    • 해당 컬럼에 인덱스가 있는지 먼저 확인
    • 인덱스에서 키 값을 탐색하여 포인터를 얻고,
    • 해당 포인터로 테이블의 정확한 행을 즉시 조회, 나머지 데이터는 건너뜀
  3. 범위 쿼리(BETWEEN, ORDER BY 등)에도 인덱스가 있으면 탐색/정렬이 매우 빨라짐

성능 예시
수백만 건 테이블에서 전체 검색이 10초 걸리던 쿼리가, 적절한 인덱스 사용 시 수밀리초(ms) 단위로 줄어듭니다.

3. 주요 인덱스 종류

1) 구조별

2) 목적별

3) 기타

4. Dense vs Sparse Index

5. B-Tree와 Hash 인덱스의 차이

구분 B-Tree 인덱스 Hash 인덱스
검색 유형 범위+일치 검색 모두 빠름 완전 일치 검색만 빠름
구조 트리(균형트리) 해시 테이블
용도 PK, 범위, 정렬, 범용 캐시, ID/키 빠른 탐색
주사용 DB MySQL/InnoDB, Postgres 등 MySQL MEMORY, 일부 인메모리 DB

6. 인덱스의 이점

7. 인덱스의 단점·부담

8. 실전 예제

CREATE TABLE Users (
    user_id INT PRIMARY KEY,
    name VARCHAR(100),
    age INT,
    gender CHAR(1),
    created_at DATETIME
);

복합 인덱스 예시

CREATE INDEX idx_name_age ON Users(name, age);
SELECT * FROM Users WHERE name = 'Jane' AND age = 25;
SELECT * FROM Users WHERE name = 'Jane' ORDER BY age;

9. 책 색인과의 비유

책의 목차/색인처럼:
색인이 없으면 한 장씩 다 넘겨야 함
색인이 있으면 "파리/paris: 77, 155, 219쪽" → 바로 찾아감

10. 언제, 어떻게 인덱스를 써야 할까?

11. 고급 인덱스 전략

12. 결론

훌륭한 인덱스 설계는 데이터베이스 성능의 핵심입니다. 하지만 인덱스는 읽기만 빠르게 해주는 대신,

실제 쿼리/워크로드/EXPLAIN을 꼭 확인하며, 쿼리 성능에 맞춰 신중하게 인덱스를 설계하세요!


데이터베이스 인덱스 성능 튜닝 & 텍스트 검색 최적화

1. 인덱스 튜닝의 기본 원칙

인덱스 선정 최적화

2. 인덱스 구조별 성능 특성

B-Tree 인덱스

Hash 인덱스

비트맵/전문(full-text) 인덱스

3. 전문(Full-Text) 검색에서의 인덱스

4. 인덱스 조정의 성능 영향

5. EXPLAIN: 실제 인덱스 사용 확인 및 진단

EXPLAIN 활용 예

고급:

6. 인덱스 관리, 모니터링, 실전 조언

7. 결론


여러 인덱스와 데이터베이스 인덱스 자료구조의 관계

1. 단일 컬럼 인덱스 (Single-Column Index)

예시

[ 인덱스 A (B-Tree) ]
   10 → Row#3
   15 → Row#7
   20 → Row#2

여러 개의 인덱스가 각각 따로 관리됨.

2. 다중 단일 인덱스와 인덱스 병합

예시

3. 복합 인덱스 (Composite/Multi-Column Index)

예시

[ 복합 인덱스 (A,B) ]
  (10,2)  → Row#2
  (10,4)  → Row#8
  (15,1)  → Row#5

4. 포인터 구조

5. 쿼리 실행 흐름 예시

6. 실무 조언

7. 요약 설명

정리:
여러 인덱스가 있는 경우 DB는 개별 B-Tree(혹은 해시) 인덱스를 따로 관리하며, 쿼리 조건에 따라 각각 스캔 후 결과를 병합하거나, 복합 인덱스를 통해 한 번에 원하는 행을 빠르게 찾습니다.
포인터 구조와 인덱스 조합 설계가 Query 성능에서 매우 중요하며, EXPLAIN 등으로 실제 활용 현황을 반드시 확인해야 합니다.

references