데이터베이스(DB) 인덱스(index) 란?

소복치·2024년 6월 2일

DB를 사용하면서 데이터의 양(row)에 따라 실행 결과 속도가 차이가 난다.
그래서 우리는 앞으로 쿼리 성능을 높이기 위해서 index를 잘 활용하는게 중요하다.

1. Index 란?

RDBMS(관계형 데이터베이스 관리 시스템)에서 테이블에 대한 검색속도를 높여주는 자료구조

인덱스를 쉽게 비유하자면 책의 '목차'라고 생각하면 된다.

책에서 정보를 찾을 때도 원하는 카테고리를 목차에서 찾고, 목차에 있는 페이지 번호를 통해 원하는 정보를 더 빠르게 찾을 수 있는것과 같다.

책에서도 목차페이지가 따로 존재하는것 처럼 DB의 index도 DB에서 메모리에 일정 공간을 사용해서 저장하게 된다.

2. Index 동작 과정 및 장점

인덱스가 생성되었다면 SELECT 쿼리문에서
'index 생성 컬럼을 where 조건으로 걸거나', 'index컬럼으로 OrderBy에 의한 sort를 적용하는' 등의 작업을 하면 옵티마이저에서 판단하여 생성된 인덱스를 적용하여 SELECT문이 실행된다.

※ 옵티마이저 : 가장 효율적인 방법으로 SQL을 수행할 최적의 처리 경로를 생성해주는 DBMS의 핵심 엔진

좀더 자세히 살펴보면,

처음에 인덱스가 생성되지 않았을때는 데이터를 검색하게 되면 조건에 맞는 데이터를 찾기 위해 테이블의 레코드를 처음부터 끝까지 다 읽으면서 검색 조건과 맞는지를 비교해야한다.

이것을 'Full Table Scan' 이라 하며 가장 느린 Scanning 방법이다.
게다가 전체 데이터를 읽기 때문에 자원소모도 매우 심하다.

만약, 목차(index)를 만들어서 데이터를 읽는다면 페이지 번호를 통해 원하는 정보를 빠르고 손쉽게 찾을 수 있다.

즉, 자원소모를 최소화 하며 빠르게 검색하는 방법 'Index를 사용하는 이유' 이다.

3. Index의 단점

index의 가장 큰 단점은 정렬된 상태를 계속 유지 시켜줘야하는 점이다.

그렇기 때문에 DML에 매우 취약하다.

INSERT, UPDATE, DELETE를 통해 데이터가 추가되거나 값이 바뀌면 index 테이블 내에 있는 값들을 다시 정렬 해야한다.

그리고 index 테이블, 원본 테이블 이렇게 두 군데의 데이터 수정 작업을 해줘야 한다는 단점도 있다. 그렇기 때문에 검색을 위주로 하는 테이블에 index를 생성하는 것이 좋다.

그리고 속도 향상을 위해 index를 많이 만드는것이 좋은건 아니다.

인덱스를 관리하기 위해선 저장공간이 추가로 필요한데, 무턱대고 많이 만들면 속도 향상에 비해 COST가 많이 들것이다.

그러므로 COST를 비교해서 index를 생성 해야한다.

4. 마무리

인덱스 정의
-> 검색속도를 높여주는 자료구조

인덱스 장점
1. 조건 검색 where절의 효율성
2. 정렬 order by 절의 효율성

인덱스 단점
1. DML에 취약
2. 속도향상을 위한 많은 인덱스는 cost 소모가 큼

profile
오늘 터져도내일 다시극복

0개의 댓글