필요한 행으로 가는 경로
자료실에 있는 모든 책의 등록 내용을 매번 읽지 않고 등록 번호로 위치를 찾는다고 생각할 수 있다. 데이터베이스에서도 인덱스는 특정 값과 관련된 행에 접근하는 경로를 제공한다. 실제 구조는 단순한 목록에 한정되지 않는다.
트리나 해시 등 서로 다른 구조가 사용되며 지원하는 탐색도 다르다. 같은 값을 찾는 일, 일정 범위를 읽는 일, 문자열을 검색하는 일에 모두 같은 인덱스가 적합한 것은 아니다.
조회 조건에 맞아야 한다
인덱스가 존재하더라도 조회에서 반드시 사용하는 것은 아니다. 대부분의 행을 읽어야 하거나 테이블이 작다면 전체를 순차적으로 읽는 편이 유리할 수 있다. 데이터베이스는 통계와 비용 추정을 바탕으로 실행 방법을 고른다.
여러 열을 묶은 인덱스에서는 열의 순서와 조건의 조합이 중요하다. 각 열에 인덱스가 있다는 사실과 특정 복합 조건을 효율적으로 처리할 수 있다는 사실은 같지 않다. 정렬이나 조인에 도움이 되는 경우도 있다.
읽기의 이득과 쓰기의 비용
행을 추가하거나 인덱스 대상 값을 바꾸면 인덱스도 갱신해야 한다. 따라서 인덱스를 무작정 늘리면 쓰기 작업과 저장 공간의 부담이 커질 수 있다. 잘 사용되지 않는 인덱스가 없는지도 점검할 필요가 있다.
기본 키나 고유성 제약을 지원하기 위해 인덱스를 사용하는 제품도 있다. 하지만 인덱스와 제약은 개념적으로 다르며 외래 키 열에 어떤 인덱스가 자동으로 만들어지는지도 제품에 따라 다르다.
실제 실행을 보고 판단하기
실행 계획은 데이터베이스가 어떤 접근 경로를 선택했는지 보여 준다. 예상 행 수와 실제 처리량, 읽기 비용을 살펴야 한다. 인덱스를 만들기 전후의 응답 시간만 한 번 비교하면 캐시나 동시 부하의 영향을 잘못 해석할 수 있다.