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: 기존의 인덱스를 사용하지 않음 처리하고, 갱신된 데이터에 대해 인덱스를 추가함
인덱스를 효율적으로 사용하기 위한 상황
- 규모가 작지 않은 테이블
- INSERT, UPDATE, DELETE가 자주 발생하지 않는 칼럼
- JOIN이나 WHERE 또는 ORDER BY에 자주 사용되는 칼럼
- 데이터의 중복도가 낮은 칼럼