Database Indecxing

HelloPong·2025년 7월 25일

공부

목록 보기
6/39
post-thumbnail

📚 Database Indexing

인덱싱은 데이버베이스 성능 최적화의 핵심!

🎈인덱스(Index)

인덱스는 도서관의 목차와 같은 역할
데이터베이스 테이블에서 특정 값을 빠르게 찾기 위해 사용하는 자료구조

🚀 인덱스의 장단점

🌟 장점

항목설명
🔍 조회 속도 향상WHERE, JOIN, ORDER BY, GROUP BY 절이 빨라짐
📈 성능 최적화대량 데이터 처리 시 효율 증가

⚠️ 단점

항목설명
💾 저장공간 사용인덱스도 별도 저장공간 차지
🐢 DML 성능 저하INSERT, UPDATE, DELETE 시 인덱스도 갱신해야 하므로 느려짐
⚠️ 과도한 인덱스너무 많은 인덱스는 오히려 성능 악화

🧠 인덱스의 자료구조

B-Tree 인덱스

균형 이진 트리 기반
대부분의 RDBMS는 기본 인덱스로 B-Tree 사용

Hash 인덱스

빠른 동등 비교 (=) 연산에 특화
범위 검색은 불가

기타

GIN / GiST 인덱스: PostgreSQL 특화
Full-Text 인덱스: 문자열 검색 최적화

🛠 인덱스 종류

종류설명예시
🌱 기본 인덱스 (Single Column)하나의 컬럼에만 적용CREATE INDEX idx_name ON table(col);
🌿 복합 인덱스 (Composite Index)여러 컬럼을 묶어서 인덱스 생성ON table(col1, col2)
🌵 유니크 인덱스 (Unique Index)중복 허용 X, 고유값 유지CREATE UNIQUE INDEX ...
🌾 프라이머리 키 인덱스PK 제약조건이 인덱스를 자동 생성PRIMARY KEY (id)
🌴 커버링 인덱스SELECT 절에 포함된 모든 컬럼이 인덱스에 있는 경우
🍄 클러스터형 인덱스실제 데이터의 물리적 정렬에 영향을 주는 인덱스 (MySQL InnoDB는 PK가 클러스터 인덱스)

🎭클러스터 인덱스 VS 논클러스터 인덱스

🌳 클러스터 인덱스 (Clustered Index)

인덱스가 실제 데이터를 정렬된 상태로 저장하는 인덱스

📌 핵심 특징

  • 테이블의 데이터 자체가 인덱스 순서대로 정렬됨
  • 한 테이블에는 오직 하나만 존재할 수 있음 (왜냐면 정렬은 하나의 기준으로만 가능하니까)
  • 주로 Primary Key가 자동으로 클러스터 인덱스가 됨 (MySQL InnoDB 기준)

🌿 논클러스터 인덱스 (Non-Clustered Index)

인덱스와 실제 데이터가 따로 저장되는 인덱스

📌 핵심 특징

  • 인덱스에는 키 + 해당 데이터의 주소(RowPointer)만 저장
  • 데이터를 찾으려면 한 번 더 테이블로 접근해야 함 (인덱스 → 데이터)
  • 여러 개 생성 가능 (하나의 테이블에 여러 논클러스터 인덱스 가능)

주요 차이 요약

항목클러스터 인덱스 🌳논클러스터 인덱스 🌿
실제 데이터 정렬O (인덱스 순서대로 정렬)X (따로 저장됨)
인덱스 수1개만 가능여러 개 가능
접근 속도빠름 (한 번에 접근)느림 (인덱스 → 테이블 두 번 접근)
기본 적용Primary Key (기본 적용)일반 인덱스 (Secondary Index)
사용 예자주 정렬/범위검색 하는 PK특정 조건 자주 조회되는 컬럼

🔸 MySQL(InnoDB)의 경우, 기본적으로 PK = 클러스터 인덱스

🔸 그 외 나머지 인덱스는 전부 논클러스터 인덱스

🔸 범위 검색이나 정렬이 중요한 경우 → 클러스터 인덱스를 잘 설계

🔸 WHERE 절에 자주 등장하는 컬럼 → 논클러스터 인덱스 생성

🧠 B-Tree

B-트리는 균형 잡힌 M-진 트리, 데이터베이스나 파일시스템처럼 대용량 데이터를 디스크 기반으로 효율적으로 탐색하기 위해 만들어진 자료구조

📦 그림으로 이해하기

       [30]
      /    \
 [10,20]   [40,50]
  • 루트 노드에 30이 있음 → 기준값이 되고
  • 왼쪽 자식 [10, 20]은 30보다 작은 값들을 저장
  • 오른쪽 자식 [40, 50]은 30보다 큰 값들을 저장
이진 탐색 트리 (BST)B-트리
한 노드에 키 1개한 노드에 키 여러 개 가능
자식 노드 2개자식 노드 M개 가능 (M ≥ 2)
깊이가 깊어질 수 있음트리의 깊이를 얕게 유지 가능

🧪 한 줄 요약

B-트리는 많은 데이터를 빠르게 찾기 위해 트리의 높이를 낮춘 자료구조이고,
데이터베이스는 이를 활용해 디스크 I/O를 최소화하며 빠르게 탐색한다!

0개의 댓글