데이터베이스 인덱스는 원하는 행을 찾는 데 사용하는 보조 자료구조다. 모든 행을 차례로 살피는 대신 검색 조건에 맞는 위치를 좁힐 수 있다. 다만 인덱스를 만들었다고 모든 조회가 빨라지는 것은 아니며, 저장 공간과 변경 처리 비용이 추가된다.
어떤 조건에 도움이 되는가
문서 번호 하나로 글을 찾거나 특정 언어의 최근 문서를 가져오는 작업은 인덱스를 검토할 만한 예다. 검색 조건, 조인 조건, 정렬 방식에 맞는 설계가 필요하다. 인덱스 유형별 지원 조건 PostgreSQL은 인덱스 사용이 더 유리하다고 판단할 때 이를 선택한다. 공식 인덱스 소개
위키에서의 판단 예
문서가 많아져도 번호 하나를 조회하는 작업은 소수의 결과만 필요하다. 반대로 거의 모든 공개 문서를 내보내는 작업은 많은 행을 읽으므로 전체 스캔이 합리적일 수 있다.
| 조회 형태 | 검토할 점 |
|---|---|
| 문서 번호로 한 건 조회 | 고유 식별자와 인덱스 |
| 언어별 최신 목록 | 필터와 정렬의 조합 |
| 전체 데이터 내보내기 | 인덱스보다 순차 읽기가 유리한지 |
이처럼 행 수뿐 아니라 조건에 해당하는 데이터의 비율도 중요하다. 자주 조회하는 열이라는 이유만으로 같은 인덱스를 무조건 추가하기보다 실제 요청 패턴을 먼저 본다.
비용과 확인 방법
행을 추가하거나 수정할 때 관련 인덱스도 유지해야 한다. 사용하지 않는 인덱스가 많으면 쓰기 비용과 저장 공간만 커질 수 있다. 큰 운영 테이블에 인덱스를 만드는 작업도 잠금과 실행 시간을 고려해야 한다.
효과는 실행 계획과 실제 응답 시간으로 확인한다. 통계가 부정확하면 예상 행 수가 빗나갈 수 있다. 기본 키를 위해 생성된 인덱스와 일반 조회용 인덱스의 목적을 구분하면 불필요한 중복도 줄일 수 있다.