0. 인덱스란?
인덱스는 데이터베이스 테이블에서 원하는 데이터를 빠르게 찾기 위해 사용하는 색인 구조이다. 즉, 데이터 검색 성능을 향상시키는 핵심 요소이다.
1. 인덱스의 필요성
인덱스가 없는 테이블에서 데이터를 찾을 때는 테이블의 모든 행을 처음부터 끝까지 순차적으로 확인해야 하기 때문에 데이터 양이 많아지면 검색 시간이 기하급수적으로 늘어난다. 이를 방지하기 위해 인덱스가 필요하다.
- 성능 향상 : 전체 테이블 스캔 없이 데이터를 빠르게 찾아갈 수 있는 경로를 제공하여 검색 속도를 높인다.
- 정렬 및 그룹화 최적화 : ORDER BY, GROUP BY 같은 연산 시, 이미 정렬된 인덱스를 사용하므로 별도의 정렬 작업이 필요없다.
- 무결성 보장 : 기본키나 UNIQUE 제약 조건을 적용할 때, 인덱스가 자동 생성되어 데이터 중복 검사를 빠르게 수행한다.
2. B-트리
현대 데이터베이스는 주로 B-트리를 인덱스 구조로 사용한다. B-트리는 데이터를 블록 단위로 관리하는 균형 잡힌 트리 구조로, 어떤 노드에서든 리프 노드까지 깊이가 항상 같도록 균형을 유지한다. 데이터를 탐색할 때 하위 노드로 이동하는데, 트리의 깊이가 낮기 때문에 블록 접근 횟수가 줄어들어 빠른 검색이 가능하다.
1) 인덱스의 대수 확장성
인덱스의 대수 확장성은 테이블의 크기가 커지더라도, 인덱스 검색 성능은 크게 저하되지 않고 안정적으로 유지되는 특성을 의미한다. B-트리는 검색 시간이 데이터 크기의 O(log_N)에 비례한다. 이 덕분에 항상 일정한 속도로 데이터를 찾을 수 있어 대규모 시스템에서도 성능이 보장되는 장점이 있다.
3. 인덱스 최적화 기법
인덱스의 이점을 최대한 활용하고 단점을 최소화하기 위한 기법들이다.
1) 복합 인덱스 사용 시 순서 고려
복합 인덱스를 생성할 때는 자주 사용되는 컬럼 또는 조건절(WHERE절)에서 '=' 연산자로 사용되는 컬럼을 가장 먼저 배치해야 한다. 그 다음은 정렬에 쓰이는 필드, 그 다음은 다중 값을 출력해야 하는 필드 순으로 배치해야 한다.
2) 카디널리티 높은 컬럼에 인덱스 생성
카디널리티는 컬럼이 가지는 중복되지 않는 값의 개수이다. 중복도가 낮은 카디널리티가 높은 컬럼에 인덱스를 생성해야 효율적이다.
3) 인덱스 힌트 사용 및 쿼리 최적화
WHERE 절에 인덱스 컬럼을 수정하지 않은 원본 형태로 사용해야 한다. DBMS의 옵티마이저가 종종 잘못된 인덱스를 선택할 수 있기 때문에, 인덱스 힌트를 사용하여 강제로 특정 인덱스를 사용하도록 지시할 수 있다.
4) 쓰기 성능 고려
인덱스는 데이터 삽입/수정/삭제 시마다 함께 갱신되어야 하므로 쓰기 성능을 저하시킨다. 따라서 검색이 많은 테이블에서는 인덱스를 최소한으로 생성해야 한다.
'CS 스터디' 카테고리의 다른 글
| 4-7. 조인의 원리 - 중첩 루프 조인, 정렬 병합 조인, 해시 조인 (1) | 2025.11.28 |
|---|---|
| 4-6. 조인의 종류 - 내부 조인, 왼쪽 조인, 오른쪽 조인, 합집합 조인 (0) | 2025.11.28 |
| 4-4. 데이터베이스의 종류 - 관계형 데이터베이스, NoSQL 데이터베이스 (0) | 2025.11.27 |
| 4-3. 트랜잭션과 무결성 - 트랜잭션, 무결성 (0) | 2025.11.27 |
| 4-2 ERD와 정규화 과정 - ERD의 중요성, 정규화 과정 (0) | 2025.11.27 |