본문 바로가기
필수 개발지식/CS

[CS] DB INDEXING

by 코딩하는짱구 2023. 6. 21.
반응형

✅DB INDEX란?

  1. 테이블에 대한 검색의 속도를 높여주는 자료 구조
  2. 색인이고 메모리 영역의 일종의 목차를 생성하는 개념
  3. 따라서 이런 목차를 이용하여 검색 범위를 줄여 속도를 높일 수 있다
  4. 인덱스란 백과사전과 유사하며, 우리가 흔히 겪어본 Array와도 유사하다

 

✅INDEX의 종류?

  1. B(Balanced)-tree Index
  2. Bitmap Index
  3. IOT Index
  4. Clustered Index

위와 같이 존재하며 주로 B-tree 구조로 사용된다고 한다.

 

 

✅INDEX를 사용하는 이유?

만약 수십만개의 데이터가 들어있는 테이블의 데이터를 조회하는데 조회 기능이 자주 사용되는 서비스라면 성능이 굉장히 떨어지게 될것이다. 왼쪽과 같이 인덱스를 따로 생성하여 해당 데이터만 빠르게 찾을 수 있게 함!

 

 

✅INDEX 작동 원리?

B-tree 알고리즘을 통하여 조회하게 되고, 리프노드로 도착하기 까지 자식 노드에 대한 포인터가 저장되어 있어 탐색에 있어서 한개의 경로만 조회하면 되기 때문에 조회에 있어서 굉장히 효율적인 알고리즘이라고 한다.

 

✅INDEX 는 언제 사용해야 하는가?

주로 검색 및 조회를 할때 큰 효율성을 낼 수 있다

기본적으로 이진 트리를 사용하기 때문에 이미 정렬이 되어있는 상태에서 추가, 수정, 삭제가 자주 일어나게 되면 인덱스에서도 마찬가지로 해당 동작들이 수행되기 때문에 성능 저하를 초래할 수 있다.

 

즉 변동이 적고 조회가 잦은 DATA를 조회할 때 쓰면 비약적인 성능 개선이 가능하지만 인스타그램같은 소셜 서비스들은 끊임없이 게시글이 작성되고 수정, 삭제되기 때문에 오히려 인덱싱을 하게되면 성능이 저하된다.

 

✅DB INDEX 예시

#PostgreSQL Index Types 종류

1. B-Tree

2. Hash

3. Gist

4. SP-Gist

5. GIN 

6. BRIN 

 

✅오늘 알게된 점 

우리 팀 프로젝트에서도 postgis를 이용해서 공간 indexing을 사용하려했는데 정확한 작동원리는 잘 모르고 있었던 것 같다. 오늘 db indexing을 더 자세히 공부하면서 왜, 어떻게 공간 indexing이 장소 조회 기능을 개선 시켜주는지 깨달았다. 

대용량 데이터를 다루면서 계속해서 indexing의 개념이 등장했는데, 오늘 확실히 알게 되었고 무엇보다 indexing을 언제 써야하는지에 대한 개념이 잡혔다. 

 

#PostGIS 는 공간데이터를 처리하기 위한 PostgreSQL의 확장 기능이며, 공간쿼리를 지원하고 공간 데이터를 '인덱싱'하여 효율적으로 검색할 수 있도록 한다. 즉 PostgreSQL과 PostGIS 를 사용해서 저장된 수많은 장소 데이터를 빠르게 검색하기 위해 인덱싱 하는 것. 

 

PostGis에서 공간인덱스는 R-트리 인덱스와 Gist 인덱스와 같은 알고리즘을 사용하여 공간 데이터를 조직화 하고 검색한다. 

 

 

✅참고자료

https://velog.io/@bsjp400/Database-DB-%EC%9D%B8%EB%8D%B1%EC%8B%B1Indexing%EC%9D%B4%EB%9E%80

반응형