DB인덱싱은 데이터베이스에서 검색 속도를 높이기 위해 특정 컬럼에 대한 데이터를 따로 저장해주는 방식이다.

쉽게 말하면 책의 목차 같은것이다.

 

인덱스 동작 방식

  1. 특정 컬럼에 대해 정렬된 자료 구조(B-Tree, Hash 등)을 생성
  2. 컬럼 값과 해당 값이 저장된 레코드의 위치(주소)를 저장
  3. 검색 시 전체 테이블을 뒤지는 게 아니라, 인덱스만 조회해서 더 빠르게 원하는 데이터를 찾을 수 있다.

 

예를 들어 피자 가게에 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

+ Recent posts