인덱스(index)란?
<aside>
💡 인덱스란?
→ 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조!
</aside>
- 만약, 책에서 원하는 내용을 찾는다고 하면 책의 모든 페이지를 찾는 것은 오랜 시간이 소요된다.
- 하지만, 책에 있는 색인을 이용하면 빠르게 찾을 수 있다 → 데이터베이스에서의 인덱스!
인덱스를 활용하면 데이터를 조회하는 SELECT 이외에도 UPDATE , DELETE 의 성능도 함께 향상된다!
- 해당 연산을 수행하려면, 우선 조회부터 해야 하기 때문이다.
- 만약, 인덱스를 사용하지 않은 컬럼을 조회해야 한다면 전체를 탐색하는 Full Scan을 수행해야 한다.
인덱스의 관리
DBMS는 인덱스를 항상 최신의 정렬된 상태로 유지해야, 원하는 값을 빠르게 탐색할 수 있다.
- 그러므로, 연산이 수행된다면 추가적인 연산을 필요로 하며, 오버헤드가 발생한다.
INSERT : 새로운 데이터에 대한 인덱스를 추가하는 연산
DELETE : 삭제하는 데이터의 인덱스를 삭제하는 연산
UPDATE : 기존의 인덱스를 사용하지 않게 처리하고, 갱신된 데이터에 대해 인덱스를 추가하는 연산
인덱스의 장단점
-
장점
- 테이블을 조회하는 속도와 그에 따른 성능을 향상시킬 수 있다.
- 전반적인 시스템의 부하를 줄일 수 있다.
-
단점
- 인덱스를 관리하기 위해 데이터베이스의 약 10%에 해당하는 저장공간이 요구된다.
- 인덱스를 관리하기 위해 추가 작업이 필요하다.
- 인덱스를 잘못 사용할 경우, 오히려 성능이 저하된다.
→ 만약, 어떤 테이블에 UPDATE 와 DELETE 가 빈번하게 발생한다면, 오히려 인덱스를 처리하기 위해 성능이 떨어지게 된다!