Backend · Infra

DB index에 대한 이해

devhyen 2024. 6. 16. 16:58

1. index란? 

  • DB에서 데이터를 빠르게 검색하고 조회하기 위한 자료구조
  • index는 특정 칼럼 또는 칼럼 조합에 대한 값과 해당 값이 존재하는 테이블 내의 물리적인 위치를 매핑한다.
  • DB성능을 향상시키는 데 중요한 역할
  • Full Scan 하지 않고 데이터를 찾을 수 있다.
  • 주로 SELECT문 에서 WHERE절에 사용되는 칼럼 혹은 JOIN에 사용되는 칼럼에 생성하는 것이 일반적이다.

2. index 알고리즘 종류 

  • B-Tree
  • B+Tree
  • Hash Index
  • Bitmap Index
  • R-Tree

일반적으로 사용 하는 알고리즘은 B-Tree와 B+Tree인데, 특히 B+Tree는 대다수의 관계형 데이터베이스 관리 시스템(RDBMS)에서 기본 인덱스 구조로 채택되고 있다.

 

B-Tree는 이진트리에서 발전되어 모든 리프노드들이 같은 레벨을 가질 수 있도록 자동으로 밸런스를 맞추는 트리입니다. 

정렬된 순서를 보장하고 멀티레벨 인덱싱을 통한 빠른 검색을 할 수 있습니다.

B-Tree는 순차검색이 힘들기 때문에 B+Tree가 등장하였다. 

B+Tree는 리프노드들이 연결리스트 형태로 연결되어 있기 때문에 순차 접근이 매우 빠르다는 특성이 있다.

 

3. index를 잘못 사용한 경우

<참고 : SQL안티패턴 책 >

  • index를 불충분하게 정의하거나 아예 정의하지 않음
  • 너무 많은 index 를 정의하거나 도움이 되지 않는 index를 정의함
  • 어떤 index도 도움이 될 수 없는 쿼리를 실행함

없는 index

index를 최신 상태로 유지하는 데 DB에 오버헤드가 있다.
INSERT,UPDATE,DELETE 사용할 때 DB는 index 데이터 구조를 업데이트 해야함. 테이블을 일관적으로 유지해 이후 index를 사용해 올바른 행 집합을 제대로 검색할 수 있기 위함.

오버헤드가 무조건 낭비는 아니다.
일반적으로 어플리케이션은 한번 업데이트 할 때 조회는 100번 할 것이다.
index를 사용하는 쿼리를 실행 할 때 마다 index 유지를 위한 오버헤드가 들어도 그것보다 많은 이득을 얻는다.

또한, index 는 DELETE와 UPDATE에서도 WHERE절을 사용하는 경우에는 도움이 된다.
index 가 없는 칼럼으로 검색하는 경우에는 Full table scan을 수행하게 된다.

너무 많은 index

사용하지 않는 너무 많은 index는 오버헤드만 초래할 뿐이다.

index가 도움이 안되는 경우

index 는 전화번호부 책과 같다.
전화번호부 책에서 성으로 시작하는 사람을 찾아려면 쉬운일이지만, 같은 이름인 사람만 찾게 된다면 책 전체를 확인해야한다.
전화번호부는 성, 이름 순으로 나열하기 때문에 DB에서 lastname,firstname 으로 된 복합 index 와 같다.
이런경우 이름으로 검색할 때는 도움이 되지 않는다.

 

'Backend · Infra' 카테고리의 다른 글

[ElasticSearch] nested Type  (0) 2024.07.10
[ElasticSearch] Query  (0) 2024.07.09
싱글톤 패턴 Singleton Pattern  (0) 2024.07.09
MSA (Microservice Architecture)  (0) 2024.07.03
Node.js 란?  (0) 2024.06.23