데이터베이스
Index
다른 이름: 인덱스 , DB Index
정의
데이터베이스 검색 속도 향상 자료구조. B+Tree(MySQL InnoDB), LSM-Tree(RocksDB), Hash(PostgreSQL) 등. 책 색인처럼 컬럼 값→디스크 위치 매핑. WHERE, JOIN 성능 개선하나 INSERT/UPDATE 느림. Clustered(PK 정렬), Secondary(별도 저장)
상세 설명
기술 스펙
- B+Tree: 균형 트리, O(log n) 조회, 범위 쿼리 최적 (MySQL, PostgreSQL)
- Hash Index: O(1) 동등 비교, 범위 쿼리 불가 (PostgreSQL, Memory 엔진)
- LSM-Tree: Write 최적화, Compaction으로 읽기 성능 (RocksDB, Cassandra)
- Full-Text Index: 텍스트 검색 (FULLTEXT, Elasticsearch)
- Spatial Index: R-Tree, 지리 좌표 (PostGIS)
- Composite Index: 다중 컬럼 (col1, col2, col3) → 최좌측 매칭
- Covering Index: SELECT 컬럼 모두 인덱스에 포함 → 테이블 접근 불필요
실무 활용
- WHERE 절: WHERE user_id = 123 (B+Tree 조회)
- JOIN: INNER JOIN orders ON users.id = orders.user_id
- ORDER BY: 정렬된 B+Tree 리프 노드 순회
- GROUP BY: 인덱스 스캔으로 중복 제거
장점
- 조회 속도 향상: Full Scan O(n) → O(log n)
- 범위 쿼리: B+Tree 리프 노드 순회
- Covering Index: 디스크 I/O 감소
- 정렬 회피: ORDER BY 최적화
단점 및 제약
- 쓰기 오버헤드: INSERT/UPDATE 시 인덱스도 수정
- 저장 공간: 테이블 크기의 10~30% 추가
- 인덱스 선택 실패: 옵티마이저가 잘못된 인덱스 선택
- Fragmentation: B+Tree 불균형 시 재구성 필요
호환성
MySQL, PostgreSQL, SQL Server, Oracle, MongoDB 모두 지원
표준 정보
표준화 기구: SQL 표준 (ANSI SQL), 각 DB별 확장
출시 연도: 1970년