인덱스란 추가적인 쓰기 작업과 저장공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다.
만약 인덱스를 사용하지 않은 컬럼을 조회해야 하는 상황이라면 전체를 탐색하는 full scan을 수행해야 하며, 전체를 비교 탐색하기 때문에 처리 속도가 떨어진다.
인덱스의 장점
- 테이블을 조회하는 속도와 그에 따른 성능을 향상시킬 수 있다.
- 전반적인 시스템의 부하를 줄일 수 있다.
인덱스의 단점
- 인덱스를 관리하기 위해 DB의 약 10%에 해당하는 저장공간이 필요하다.
- 인덱스를 관리하기 위해 추가적인 작업이 필요하다.
- 인덱스를 잘 못 사용할 경우 오히려 성능이 저하되는 역효과가 발생할 수 있다.
만약 create, update, delete가 빈번한 속성에 인덱스를 걸게되면 인덱스의 크리가 비대해져서 성능이 오히려 저하된다.
그러한 이유 중 하나는 update, delete 연산 때문이다.
update, delete는 기존의 인덱스를 삭제하는 것이 아닌 사용하지 않음 처리를 하기 때문이 인덱스의 크기가 비대해진다.
인덱스를 사용하면 좋은 경우
- 규모가 작지 않은 테이블
- insert, update, delete가 자주 발생하지 않는 컬럼
- join이나 where 또는 order by에 자주 사용되는 컬럼
- 데이터의 중복도가 낮은 컬럼
인덱스를 사용하는 것 만큼이나 생성된 인덱스를 관리해주는 것도 중요하다, 사용되지 않는 인덱스는 바로 제거해주어야 한다.