인덱스가 없다면
인덱스가 없으면 DB는 원하는 행을 찾기 위해 테이블 전체를 처음부터 끝까지 훑어야 합니다(풀 스캔). 데이터가 많아질수록 이 방식은 선형적으로 느려집니다.
B-Tree란
B-Tree(Balanced Tree)는 데이터를 정렬된 상태로 트리 구조에 저장해, 루트에서 리프 노드까지 몇 단계만 거치면 원하는 값을 찾을 수 있게 하는 자료구조입니다. 트리의 모든 리프 노드가 같은 깊이를 유지하도록 "균형"을 맞추는 것이 핵심입니다.
왜 빠른가
데이터가 100만 건이어도 B-Tree는 로그(log) 시간 복잡도로 동작하기 때문에, 트리 깊이가 몇 단계만 늘어도 훨씬 많은 데이터를 감당할 수 있습니다. 예를 들어 100만 건이 있어도 실제로는 3~4단계만 거치면 원하는 값을 찾을 수 있는 구조입니다.
B-Tree 인덱스가 잘 맞는 경우
- 등가 비교(=): 특정 값과 정확히 일치하는 행 찾기
- 범위 검색(<, >, BETWEEN): 정렬된 구조 덕분에 범위 조회에도 효율적
- 정렬(ORDER BY): 이미 정렬돼 있어 추가 정렬 비용 절감
주의할 점
인덱스를 많이 걸수록 조회는 빨라지지만, INSERT/UPDATE/DELETE 시마다 인덱스도 함께 갱신해야 하므로 쓰기 성능은 떨어집니다. 자주 조회되는 컬럼 위주로 신중하게 걸어야 합니다.