관리 메뉴

백엔드 엔지니어 이재혁

[DB] 현실을 통해 쉽게 이해하는 Index 본문

Database

[DB] 현실을 통해 쉽게 이해하는 Index

alex00728 2025. 4. 11. 17:56

개념 이해하기

데이터베이스의 Index(인덱스)는 저장된 데이터의 검색 속도를 향상시키기 위한 기능이다.

Index는 개념적으로 전화번호부의 "지역번호" 혹은 사람 이름의 "ㄱㄴㄷ" 색인과 비슷한 역할을 한다고 생각하면 쉽다.

 

사실 Index를 번역하면 색인이다(...)

 

예시를 살펴보자

전화번호부에서 전화번호 찾기

직접 종이 전화번호부에서 043-1234-1234를 찾는다고 생각해보자. 만약 전화번호부의 몇 쪽부터 "043" 지역번호가 있다는 정보가 없다면, 앞에서부터 모든 페이지를 살펴보며 02, 031, 032, ... 확인해보게 될 것이다. 이는 전화번호부가 두꺼워질 수록 시간이 훨씬 길게 소요될 수 밖에 없는 작업이다.

(물론 우리는 경험을 기반으로 043이 대충 어느정도 뒤에 있겠구나라는 것을 알지만 일단 기계적으로 생각해보자구요. 컴퓨터를 이해하려는 것이니까~)

 

만약, 02, 031, 032, ... 지역번호가 몇 페이지부터 있는지 알려주는 색인이 있다면?

색인에서 043이 204쪽부터 있다는 표시를 보고 바로 204쪽부터 확인해나가면 훨씬 빠르게 찾을 수 있을 것이다.

 

이게 데이터베이스의 Index와 같은 기능이다.

 

연락처에서 이름으로 찾기

이번에는 좀 더 현대적인 휴대폰의 연락처 기능에 비유해보겠다. 내가 "큰이모"의 전화번호를 찾을 때, 연락처에서 맨 위부터 스크롤을 쭉 내리면서 찾는 방식이 Index 없이 찾는 방식이다. (DB에서는 이런 탐색을 Full Scan이라고 한다.)

 

대신, 만약 ㄱ, ㄴ, ㄷ 자음으로 색인이 걸려있다면? 오른쪽 사진과 같이 ㅋ 을 눌러서 바로 ㅋ으로 시작하는 연락처 항목으로 넘어갈 것이다. 이 연락처 앱에는 ㅋ이 얼마나 내려가야 있는지 이미 색인 정보가 저장되어 있는 것이다.

 

연락처에 만약 10만명이 저장되어 있다면? 색인없이 한 사람 한 사람 찾기가 정말 고역일 것이다.

 

선생님, 그냥 저기 있는 🔍검색 기능 쓰면 안되나요?

 

오~ 맞아요! 검색 기능을 쓰면 되죠!
하지만 검색 기능은 방금 사람이 한 일을 컴퓨터가 "대신" 해주는 것 뿐이예요. 컴퓨터라도 색인없이 원하는 정보를 찾으려면 위에서부터 쭉 확인해야 합니다.

컴퓨터가 데이터를 확인하는 시간이 사람보다 훨씬 빠르기 때문에 데이터가 많지 않을 때는 색인이 있으나 없으나 똑같이 느껴질 수 있어요. 하지만 데이터가 엄청나게 많아지면 컴퓨터도 색인이 필요해집니다.

 

 

Index의 장단점

장점

데이터 전체를 확인하지 않고도 데이터의 "빠른 검색"이 가능하다.

단점

1. Index를 저장하는 공간이 필요하다.

2. Index를 유지보수하는 비용(컴퓨팅 파워)이 필요하다.

 

단점 살펴보기

위 두 단점이 실제로 왜 발생하는지 실체가 있는 종이 전화번호부를 예시로 쉽게 설명해보겠다.

 

저장 공간이 필요한 이유

043-1234-1234 를 찾을 때, 043이 204쪽부터 있다고 따로 적어놓는 공간이 필요하다

 

유지보수하는 비용이 드는 이유

전화번호는 수시로 추가되고 삭제된다. 따라서, 043이 앞으로는 205쪽부터 있을 수도 있고, 310쪽부터 있을 수도 있다. 이렇게 데이터가 추가되고 삭제되면서 매번 색인도 업데이트 해줘야 한다는 점으로 인해 색인 수정 작업을 계속 해줘야 하는 비용이 들어간다.

 

 

따라서, DB에 Index를 걸면 무조건 성능이 향상된다고 생각하면 안된다.

너무 남발하는 경우 오히려 인덱스를 업데이트하는 비용이 더 커질 수도 있다!

Trade-off를 고려해 적절하게 Index를 사용하자

 

 

실제로 Index는 어떻게 거는지, 어떤 기준으로 Index를 걸지에 대해서는 다음 번 글에서 작성하겠다.

 

 

 

다음 글 [DB] MariaDB - Index 걸기

'Database' 카테고리의 다른 글

[DB] MariaDB - Index 걸기  (0) 2025.04.13