인덱스(index)란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다.

책의 저자들은 책의 맨 앞 또는 맨 뒤에 색인을 추가하는데, 데이터베이스의 index는 책의 색인과 같다.

DB에서도 테이블의 모든 데이터를 검색하면 시간이 오래 걸린다. 그래서 **데이터데이터의 위치를 포함한 자료구조**를 생성하여 빠르게 조회할 수 있도록 돕는다.

Untitled

인덱스를 활용하면, 데이터를 조회하는 SELECT 외에도 UPDATEDELETE의 성능이 함께 향상된다.

// Mang이라는 이름을 업데이트 해주기 위해서는 Mang을 조회해야 한다.
UPDATE USER SET NAME = 'MangKyu' WHERE NAME = 'Mang';

만약 index를 사용하지 않은 컬럼을 조회해야 하는 상황이라면, 전체를 탐색하는 Full Scan을 수행해야 한다. Full Scan은 전체를 비교하여 탐색하기 때문에 처리 속도가 떨어진다.

인덱스의 관리

DBMS는 index를 항상 최신의 정렬된 상태로 유지해야 원하는 값을 빠르게 탐색할 수 있다.

그렇기 때문에 인덱스가 적용된 컬럼에 INSERT, UPDATE, DELETE가 수행된다면 각각 다음과 같은 연산을 추가적으로 해줘야 하며, 그에 따른 오버헤드가 발생한다.

인덱스의 장점