CS

DB인덱스란?

Timha 2023. 2. 3. 13:45

인덱스는 DBMS의 저장 성능을 희생하고 인덱스 통해 테이블에 존재하는 데이터 검색 성능을 높이기 위해 만들어진 자료 구조이다.

사전의 목차처럼 인덱스를 이용하여 원하는 데이터에 빠르게 접근할 수 있다

인덱스가 적용된 컬럼의 테이블(컬럼, 인덱스주소)을 따로 파일로 저장해놓고  그것을 검색해서 검색 효율을 높이는 방법

인덱스는 select문의 where, join에서 좋은 성능을 발휘한다. 대신 insert, update, delete문에서 성능이 떨어진다.

ex)

  • 책의 맨 앞에 존재하는 색인 = = DBMS의 인덱스
  • 책의 내용 = DBMS의 데이터 파일
  • 책의 색인을 통해 알 수 있는 페이지 번호 = DBMS의 데이터 파일에 저장된 레코드의 주소
  • 책의 색인은 사전 순으로 정렬 = DBMS의 인덱스도 일정 기준으로 정렬 가능

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

이를 위해서 인덱스 데이터를 새로 만들게 되고 실제 데이터가 10만인데 테이블에는 100만 개의 데이터가 있을 수 있다는 것이다

장점

  • 테이블을 조회하는 속도와 그에 따른 성능을 향상 할 수 있다.
  • 전반적인 시스템의 부하를 줄일 수 있다.

단점

저장공간의 증가, 인덱스를 사용하게되면 추가작업이 필요해짐 , 케이스에 따라 성능저하

  • 색성능은 향상될 수 있으나 추가 저장공간도 필요하고 변경 작업이 많아지면 인덱스 재구성에 필요한 비용이 커진다. - >인덱스를 생성하게 되면 INSERT, DELETE, UPDATE 쿼리문을 실행할 때 별도의 과정이 추가적으로 발생하기 때문이다
  • INSERT: 새로운 데이터에 대한 인덱스를 추가함
  • DELETE: 삭제하는 데이터의 인덱스를 사용하지 않는다는 작업을 진행함
  • UPDATE: 기존의 인덱스를 사용하지 않음 처리하고, 갱신된 데이터에 대해 인덱스를 추가함

인덱스를 효율적으로 사용하기 위한 상황

  1. 규모가 작지 않은 테이블
  2. INSERT, UPDATE, DELETE가 자주 발생하지 않는 칼럼
  3. JOIN이나 WHERE 또는 ORDER BY에 자주 사용되는 칼럼
  4. 데이터의 중복도가 낮은 칼럼