2025-09-01 00:49

Tags: SQL

인덱스

  • 데이터베이스인덱스는 책의 목차 처럼 검색 속도를 비약적으로 향상시키는 자료구조
    • 인덱스는 특정 컬럼(들)의 데이터와 해당 데이터가 저장된 행의 물리적 주소를 키-값 쌍으로 저장하는 별도의 자료 구조
    • 전체 데이터베이스를 뒤지는 대신 잘 정렬된 인덱스를 먼저 탐색해 원하는 데이터 위치 찾아냄
  • 빠른 검색(SELECT)를 가능하게 하지만 데이터 변경(INSERT, UPDATE, DELETE) 에는 성능저하 일으키는 트레이드 오프 관계 가짐
  • 내부적으로는 B 트리 (B-Tree)구조를 가짐
    • B-Tree의 탐색 시간 복잡도는 O(log N)으로, 풀 테이블 스캔의 O(N)에 비해 압도적으로 빠름
    • 데이터가 100만 건일 때, 풀 스캔은 100만 번의 연산, B-Tree는 약 20번(log₂(1,000,000) ≈ 20) 정도의 연산
  • 보통 직접 인덱스 쓰라고 명령하진 않고 한번 생성해두면 옵티마이저가 알아서 스스로 결정
CREATE INDEX idx_user_name ON users (name);
  • 인덱스는 읽기 성능을 극대화하지만 쓰기 성능을 저하시킨다.
  • B-Tree 구조 덕분에 데이터 양에 관계없이 일관되고 빠른 검색이 가능하다.
  • WHERE, 조인 ORDER BY 등 특정 쿼리 패턴에서 효과적이다.
  • 카디널리티, 복합 인덱스의 컬럼 순서, 클러스터링 여부 등을 종합적으로 고려하여 전략적으로 설계해야 한다.