BETTER WAY 12 인덱스를 단순 필터링 이상의 목적으로 사용하자
인덱스는 데이터베이스 내에 있는 독특한 데이터 구조체다. 생성된 각 인덱스에는 별도의 저장 공간이 필요하며, 인덱스화된 테이블 데이터의 복사본이 있어 과잉 데이터를 저장한다. 하지만 이런 과잉 데이터는 수용할 만하다. 인덱스는 테이블의 모든 로우를 매번 검색하지 않고도 데이터 위치를 빠르게 찾아서 테이블에 있는 데이터를 가져오는 속도를 향상하기 때문이다. 이런 인덱스는 여러 면에서 매우 유용하다.
SQL 문에서 검색 조건은 WHERE 절에 기술하는데, 여기서 데이터를 빠르게 찾는다는 인덱스의 핵심 목적이 진가를 발휘한다. 느린 쿼리의 첫 번째 범인은 제대로 작성되지 않은 WHERE 절이다.
컬럼을 인덱스로 만들었는지 여부는 테이블 간 조인이 얼마나 효율적으로 수행되는지에 영향을 미친다. 요컨대 조인을 이용하면 정규화된 모델의 데이터를 특정 처리에 적합한 역정규화된 형태로 변환할 수 있다. 조인은 여러 테이블에 분산된 데이터를 결합하므로 여러 페이지에 있는 데이터를 더 많이 읽느라 디스크 탐색 대기 시간에 민감하다. 따라서 적절하게 인덱스를 만드는 것은 조인이 응답하는 시간에 큰 영향을 줄 수 있다.