인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다.
책으로 예를 들어보자. 페이지가 많은 책에서 내가 원하는 내용을 찾기 위해 모든 페이지를 찾으려면 많은 시간이 걸린다. 따라서 책에는 색인을 추가하여 원하는 내용을 찾기 용이하게 도와준다.
데이터베이스에서 index가 책에서의 색인이라고 생각하면된다.
하나의 데이터를 찾기위해 모든 데이터를 검색하지않도록 데이터와 데이터의 위치를 포함한 자료구조를 생성하여 빠르게 조회하도록 한다.
Where절의 성능 향상
: 보통 조건 검색 Where절을 사용하면 특정 조건에 맞는 데이터를 찾기위해 모든 데이터를 다 비교해야한다. 인덱스를 통해 빠르게 조회하여 성능을 향상시킬 수 있다.
Order by절의 성능 향상
: 인덱스를 통해 미리 정렬해놓기때문에 Order by절에서 부하가 많이 걸리는 작업인 sort 과정을 생략할 수 있다.
MIN, MAX의 성능 향상
: 인덱스를 통한 정렬이 이미 되어있기에 효율적으로 찾을 수 있다.
정렬된 상태를 유지
: index를 항상 최신의 정렬 상태로 유지해야한다. 인덱스가 적용된 컬럼에 INSERT, UPDATE, DELETE가 수행된다면 아래와 같은 연산을 추가적으로 해주어야 하며 그에 따른 오버헤드가 발생한다.
INSERT: 새로운 데이터에 대한 인덱스를 추가함
DELETE: 삭제하는 데이터의 인덱스를 사용하지 않는다는 작업을 진행함
UPDATE: 기존의 인덱스를 사용하지 않음 처리하고, 갱신된 데이터에 대해 인덱스를 추가함
데이터가 적은 테이블은 사용 X
무조건 많이 인덱스를 사용 X
Reference