Day 43 · 3/5
🌿 중급 DB

데이터베이스 인덱스는 왜 필요한가요?

쉽게 이해하기

책 뒤에 있는 색인(찾아보기)과 똑같아요. 500페이지짜리 책에서 '데이터베이스'라는 단어를 찾으려면 처음부터 끝까지 읽어야 하지만, 색인을 보면 '데이터베이스: 235쪽'처럼 바로 페이지를 찾을 수 있죠. 인덱스도 데이터를 빠르게 찾을 수 있게 미리 정리해둔 참조표입니다.

핵심 정리

데이터 검색 속도를 빠르게 하기 위해 정렬된 참조 목록을 만드는 것입니다.

자세히 알아보기

데이터베이스 인덱스는 검색 성능을 극적으로 향상시키는 핵심 기능입니다. 인덱스 없이 데이터를 찾으려면 테이블의 모든 행을 하나씩 검사해야 하는데, 이를 'Full Table Scan'이라고 합니다. 100만 개 행이 있는 테이블에서 특정 사용자를 찾으려면 최악의 경우 100만 번을 확인해야 하죠. 인덱스를 만들면 정렬된 구조(주로 B-Tree)로 데이터 위치를 기록합니다. 예를 들어 이메일 컬럼에 인덱스를 만들면, 이메일 주소가 알파벳 순으로 정렬되어 저장되고 각 이메일이 어느 행에 있는지 기록됩니다. 이렇게 하면 이진 탐색으로 100만 개 중에서도 약 20번의 비교만으로 찾을 수 있습니다. 하지만 인덱스에도 단점이 있습니다. 인덱스 자체가 저장 공간을 차지하고, 데이터를 추가하거나 수정할 때 인덱스도 함께 업데이트해야 해서 쓰기 속도가 느려집니다. 따라서 자주 검색하는 컬럼에만 선택적으로 인덱스를 만들어야 합니다. 실무에서는 WHERE 절에 자주 등장하는 컬럼, JOIN에 사용되는 외래 키, 정렬(ORDER BY)에 사용되는 컬럼에 인덱스를 만듭니다. 예를 들어 사용자 테이블이라면 이메일, 사용자명, 생성일 같은 컬럼에 인덱스를 만드는 것이 일반적입니다. 데이터베이스 관리 도구에서 쿼리 실행 계획을 확인하면 인덱스가 제대로 사용되는지 알 수 있습니다.