DB인덱싱은 데이터베이스에서 검색 속도를 높이기 위해 특정 컬럼에 대한 데이터를 따로 저장해주는 방식이다.
쉽게 말하면 책의 목차 같은것이다.
인덱스 동작 방식
- 특정 컬럼에 대해 정렬된 자료 구조(B-Tree, Hash 등)을 생성
- 컬럼 값과 해당 값이 저장된 레코드의 위치(주소)를 저장
- 검색 시 전체 테이블을 뒤지는 게 아니라, 인덱스만 조회해서 더 빠르게 원하는 데이터를 찾을 수 있다.

예를 들어 피자 가게에 1000명의 고객 명단이 있다. 컬럼으로는 손님 이름, 전화번호, 주소, 성별 등이 있다.
이 때 홍길동의 전화번호를 찾는다고 가정하면
인덱스가 없는 경우 : 손님 명단 처음부터 끝까지 하나씩 다 뒤져서 홍길동을 찾는다. -> 시간이 엄청 오래 걸림
인덱스가 있는 경우 : 가게 사장이 고객이름 순서대로 정리된 전화번호부(목차) 를 따로 만든다.
- 강감찬 → 010-1111-2222
- 김영희 → 010-3333-4444
- 홍길동 → 010-1234-5678
바로 인덱스에서 홍길동을 찾아 전화번호만 딱 가져오면 된다. -> 시간이 매우 빠름
생각해보면 인덱스도 결국 모든 고객이름을 조회해야한다고 생각할 수 있다. 하지만 인덱스는 특별한 구조로 되어있다.
예를 들어 B-Tree라는 구조로 되어있다면. B-Tree는 루트를 먼저 찾고, 찾는 값이 크면 오른쪽 노드, 작으면 왼쪽 노드 이런식으로 가지를 타며 찾아가는 구조이다.

이런식으로 정렬되어있다면 홍길동을 그냥 찾으려면 5번만에 찾고, B-Tree로 되어있다면 3번만에 찾는다.
지금은 데이터가 5개라서 효율적이지 않지만 만약 데이터가 100만개라면 차원이 달라진다.
'TIL' 카테고리의 다른 글
QueryDSL을 활용한 동적 쿼리 최적화 (0) | 2025.03.31 |
---|---|
RabbitMQ 와 Kafka (0) | 2025.03.07 |
Cache (0) | 2025.03.05 |
Redis (0) | 2025.03.04 |
Spring Security의 @AuthenticationPrincipal 이해하기 (0) | 2025.02.25 |