1. DB 성능의 비밀, 인덱스(Index)란 무엇인가?
물리 수업을 위해 수천 페이지에 달하는 두꺼운 전공 서적을 구입했다고 가정하자. 교수님이 '열역학'과 관련된 모든 내용을 찾아오라는 과제를 내주었을 때, 인덱스가 없는 상태라면 책의 첫 페이지부터 마지막 페이지까지 일일이 넘기며 해당 단어를 찾아야 한다.
이러한 탐색 방식을 데이터베이스에서는 Full Scan(전체 테이블 스캔)이라고 부른다. 테이블의 규모가 커질수록 탐색 시간은 데이터의 양에 비례하여 기하급수적으로 늘어나며, 이는 곧 시스템의 응답 지연으로 이어진다.
이때 방대한 분량 속에서 특정 주제의 위치를 미리 기록해 둔 '책갈피'나 '찾아보기'가 있다면 탐색 효율은 극적으로 향상된다. 데이터베이스의 인덱스(Index)가 바로 이 책갈피의 역할을 수행한다. 특정 데이터가 물리적으로 어디에 위치해 있는지 인덱스라는 별도의 공간에 미리 기록해 두기 때문에, 수천만 건의 데이터 속에서도 원하는 정보를 수 밀리초(ms) 내에 찾아낼 수 있는 것이다.
2. 인덱스의 작동 원리와 카테고리화
인덱스는 테이블에서 원하는 데이터를 빠르고 효율적으로 찾기 위해 특정 기준에 맞춰 데이터를 미리 정렬해 두는 원리로 작동한다. 서점의 진열 방식을 예로 들면 이해가 명확해진다.
대부분의 독자는 서점에서 책을 찾을 때 'IT', '요리', '교육' 등 카테고리를 기준으로 탐색을 시작한다. 데이터베이스 역시 책 정보를 저장할 때 '카테고리' 속성에 대해 인덱스를 생성할 수 있다. 인덱스가 생성되면 데이터베이스는 해당 속성을 기준으로 정렬된 별도의 리스트를 관리하게 된다. 이를 통해 특정 카테고리의 책을 조회할 때 모든 서가를 뒤질 필요 없이, 인덱스에 기록된 특정 범위만 즉시 확인하여 데이터를 반환한다.
3. 인덱스의 양면성: 트레이드오프(Trade-off)
인덱스는 탐색 속도를 비약적으로 높여주지만, 반드시 대가가 따르는 트레이드오프(Trade-off) 관계에 있다.
- 탐색 속도의 향상: 데이터 조회(SELECT) 시 검색 범위를 줄여 압도적인 성능을 제공한다.
- CUD 성능의 저하: 데이터가 추가(INSERT), 수정(UPDATE), 삭제(DELETE)될 때마다 인덱스 역시 최신 상태를 유지하기 위해 매번 정렬 작업을 새로 수행해야 한다.
따라서 무분별한 인덱스 생성은 오히려 데이터베이스의 전체적인 성능을 갉아먹는 원인이 된다. 결국 인덱스 설계의 핵심은 조회 성능의 이득과 쓰기 비용의 손실 사이에서 최적의 균형점을 찾는 데 있다.
'Database > MySQL' 카테고리의 다른 글
| [Index-6][Optimization] 실전 분석 (2) - 실행 계획 타입(Type) (0) | 2025.12.24 |
|---|---|
| [Index-5][Optimization] 실전 분석 (1) - 실행 계획의 이해 (0) | 2025.12.23 |
| [Index-4][Optimization] 심화 이론 (2) - 물리적 저장 구조 (0) | 2025.12.23 |
| [Index-3][Optimization] 심화 이론 (1) - B-Tree와 B+Tree (0) | 2025.12.23 |
| [Index-2][Optimization]인덱스 설계와 카디널리티 전략 (0) | 2025.12.23 |
