Database Index

less than 1 minute read

DATABASE INDEX

Why?

추가적인 쓰기 작업과 저장공간을 활용해서 데이터베이스 테이블의 검색 속도를 향상시킬 수 있다.

인덱스를 활용하면, 데이터를 조회하는 SELECT 외에도 UPDATE나 DELETE의 성능이 함께 향상된다. 해당 연산을 수행하려면 해당 대상을 조회해야만 작업을 할 수 있기 때문이다.

사용하면 좋은 경우

  • 규모가 작지 않은 테이블

  • INSERT, UPDATE, DELETE가 자주 발생하지 않는 컬럼

DELETE는 기존의 인덱스를 삭제하지 않고 ‘사용하지 않음’ 처리를 해주기 때문에 빈번하게 발생된다면 실제 데이터에 비해 누적 인덱스가 매우 커져 SQL문 처리 시 비대해진 인덱스에 의해 오히려 성능이 떨어지게 될 것이다.

  • JOIN이나 WHERE 또는 ORDER BY에 자주 사용되는 컬럼

  • 데이터의 중복도가 낮은 컬럼

인덱스 관리

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

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

  • INSERT: 새로운 데이터에 대한 인덱스를 추가함
  • DELETE: 삭제하는 데이터의 인덱스를 사용하지 않는다는 작업을 진행함
  • UPDATE: 기존의 인덱스를 사용하지 않음 처리하고, 갱신된 데이터에 대해 인덱스를 추가함

장점

테이블을 조회하는 속도와 그에 따른 성능을 향상시킬 수 있다.

전반적인 시스템의 부하를 줄일 수 있다.

단점

인덱스를 관리하기 위해 DB의 약 10%에 해당하는 저장공간이 필요하다.

인덱스를 관리하기 위해 추가 작업이 필요하다.

잘못 사용할 경우 오히려 성능이 저하되는 역효과가 발생할 수 있다.

Categories:

Updated: