Index

김민규·2022년 11월 28일
0

개발 지식

목록 보기
9/10

Index

Database 관점에서 Index란 무엇인가?

조금 딱딱하게 정의하자면 다음과 같다.

추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조

Index를 설명할 때 주로 색인 이라는 표현을 사용한다.

Index는 마치 책의 목차처럼 우리가 찾는 페이지를 빠르게 찾게 도와주는 역할을 한다.

UPDATE USER SET NAME = 'Primrose' WHERE NAME = 'Prim';

인덱스를 활용하면, 데이터를 조회하는 SELECT 외에도 UPDATE나 DELETE의 성능이 함께 향상된다.

만약 Index를 사용하지 않는다면 Full Scan 작업을 수행해야하는데, 이는 처리 속도가 떨어질 수 밖에 없다.

인덱스(index)의 관리

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

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

INSERT: 새로운 데이터에 대한 인덱스를 추가함

기존 Block에 여유가 없을 때, 새로운 Data가 입력된다.
새로운 Block을 할당받은 후, Key를 옮기는 작업을 수행한다.
Index split 작업 동안, 해당 Block의 Key값에 대해서 DML이 블로킹 된다.

DELETE: 삭제하는 데이터의 인덱스를 사용하지 않는다는 작업을 진행함

<Table과 Index 상황비교>
Table에서 Data가 DELETE 되는 경우

Data가 지워지고 다른 Data가 해당 공간 사용 가능
Index에서 Data가 DELETE 되는 경우

Data가 지워지지 않고, 사용 안 됨 표시만 해둔다.

고로 Table의 Data수와 Index의 Data 수가 다를 수 있다.

UPDATE: 기존의 인덱스를 사용하지 않음 처리하고, 갱신된 데이터에 대해 인덱스를 추가함

Table에서 UPDATE가 발생하면 Index는 UPDATE 할 수 있다.

Index에서는 DELETE가 발생하고, 새로운 작업의 INSERT 작업을 하므로 2배의 작업이 소요.

인덱스(index)의 장점과 단점

장점

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

단점

  1. 인덱스를 관리하기 위해 DB의 약 10%에 해당하는 저장공간이 필요하다.
  2. 인덱스를 관리하기 위해 추가 작업이 필요하다.
  3. 인덱스를 잘못 사용할 경우 오히려 성능이 저하되는 역효과가 발생할 수 있다.

만약 CREATE, DELETE, UPDATE가 빈번한 속성에 인덱스를 걸게 되면 인덱스의 크기가 비대해져서 성능이 오히려 저하되는 역효과가 발생할 수 있다.

그러한 이유 중 하나는 DELETE와 UPDATE 연산 때문이다.

앞에서 설명한대로, UPDATE와 DELETE는 기존의 인덱스를 삭제하지 않고 '사용하지 않음' 처리를 해준다고 하였다.

만약 어떤 테이블에 UPDATE와 DELETE가 빈번하게 발생된다면 실제 데이터는 10만건이지만 인덱스는 100만 건이 넘어가게 되어, SQL문 처리 시 비대해진 인덱스에 의해 오히려 성능이 떨어지게 될 것이다.

사용하면 좋은 경우

(1) Where 절에서 자주 사용되는 Column
(2) 외래키가 사용되는 Column
(3) Join에 자주 사용되는 Column

Index 사용을 피해야 하는 경우

(1) Data 중복도가 높은 Column
(2) DML이 자주 일어나는 Column (DML에 취약하기 때문에)

Sources …

Index
Database Index
Database Index란

profile
Smart Contract Developer

0개의 댓글