2026-03-08
인덱스(Index)란
인덱스(Index)란?
데이터베이스에서 검색 속도를 빠르게 하기 위해 사용하는 자료구조

- 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조
SELECT *
FROM user
WHERE name = 'kim'
- 인덱스 없으면 테이블 전체를 스캔 (Full Table Scan)
- 인덱스 있으면 빠르게 위치 찾기
인덱스 내부 구조
대부분 DB는 B+Tree 구조 사용
- 실제 데이터는 리프 노드에만 존재
- 리프 노드가 Linked List 형태로 연결
- Redis는 해시테이블 사용
특징
- 정렬된 구조
- 이진 탐색처럼 빠르게 검색
- 시간 복잡도
O(log n)
인덱스 장점
- 조회 속도 향상
- 정렬 속도 향상
- WHERE 조건 검색 빠름
WHERE
JOIN
ORDER BY
인덱스 단점
- 연산을 추가적으로 해줘야 해 그에 따른 오버헤드가 발생
- INSERT: 새로운 데이터에 대한 인덱스를 추가함
- UPDATE: 기존의 인덱스를 사용하지 않음 처리하고, 갱신된 데이터에 대해 인덱스를 추가함
- DELETE: 삭제하는 데이터의 인덱스를 사용하지 않는다는 작업을 진행함
- 저장공간 추가 사용
인덱스를 쓰면 좋은 경우
- WHERE 조건에 자주 사용
- JOIN 조건
- ORDER BY
- 데이터가 많은 테이블
인덱스 쓰면 안 좋은 경우
- 데이터가 매우 적은 테이블
- INSERT, UPDATE, DELETE가 매우 많은 컬럼
- 중복값이 많은 컬럼
- 예시
gender true / false
참고자료
- https://mangkyu.tistory.com/96
- https://velog.io/@bagt/DB-Index%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC
- https://coding-factory.tistory.com/746
- https://ittrue.tistory.com/331