인덱스(index)
란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다.
책의 저자들은 책의 맨 앞 또는 맨 뒤에 색인을 추가하는데, 데이터베이스의 index는 책의 색인과 같다.
DB에서도 테이블의 모든 데이터를 검색하면 시간이 오래 걸린다. 그래서 **데이터
와 데이터의 위치를 포함한 자료구조
**를 생성하여 빠르게 조회할 수 있도록 돕는다.
인덱스를 활용하면, 데이터를 조회하는 SELECT
외에도 UPDATE
나 DELETE
의 성능이 함께 향상된다.
// Mang이라는 이름을 업데이트 해주기 위해서는 Mang을 조회해야 한다.
UPDATE USER SET NAME = 'MangKyu' WHERE NAME = 'Mang';
만약 index
를 사용하지 않은 컬럼을 조회해야 하는 상황이라면, 전체를 탐색하는 Full Scan
을 수행해야 한다. Full Scan
은 전체를 비교하여 탐색하기 때문에 처리 속도가 떨어진다.
DBMS는 index를 항상 최신의 정렬된 상태로 유지해야 원하는 값을 빠르게 탐색할 수 있다.
그렇기 때문에 인덱스가 적용된 컬럼에 INSERT
, UPDATE
, DELETE
가 수행된다면 각각 다음과 같은 연산을 추가적으로 해줘야 하며, 그에 따른 오버헤드
가 발생한다.
INSERT
: 새로운 데이터에 대한 인덱스를 추가함DELETE
: 삭제하는 데이터의 인덱스를 사용하지 않는다는 작업을 진행함UPDATE
: 기존의 인덱스를 사용하지 않음 처리, 갱신된 데이터에 대한 인덱스 추가